java 并發(fā) (concurrency)

一甜癞、進程和線程

1夕晓、進程

a、擁有自包含的執(zhí)行環(huán)境

b带欢、擁有完整的运授、私有的運行時資源的集合

c、擁有自己的內存空間

?進程的同義詞有“程序”乔煞、“應用”吁朦,pipe、socket能夠為一個系統(tǒng)中的不同進程渡贾,或者不同系統(tǒng)中的多個進程逗宜。

2、線程

a空骚、輕量級的進程纺讲,存在于進程之中

b、線程與進程共享內存囤屹、打開的文件

對于開發(fā)者而言熬甚,啟動的線程只有一個,那就是main()肋坚。

Thread.slepp方法保證休眠的時間乡括,因為時間會受到底層操作系統(tǒng)的影響。同時智厌,休眠期間有可能會被Interrupt诲泌。

即使代碼中沒有使用可能拋出異常的方法,也可以顯式的判斷有沒有異常(比如用if)铣鹏,有的話進行處理敷扫。

isInterrupt方法在alive的線程未被Interrupt時,返回false;不是alive的線程被Interrupt時也返回false诚卸。

join()方法允許一個線程等待另一個線程執(zhí)行結束再繼續(xù)執(zhí)行葵第。

3、線程沖突

多個線程同時引用同一個對象合溺,并且操作不是原子操作的時候羹幸,有可能會出現線程沖突。

比如;i++操作,在jvm層面辫愉,該操作分為三步,多個線程同時執(zhí)行i++将硝,會出現interleave的情況恭朗,不能夠保證每次執(zhí)行(對應的jvm層面分解之后的操作)的順序都是一樣的屏镊。

4、內存不一致錯誤

對于多個線程共享的對象痰腮,一個線程對該對象寫內存之后而芥,對其他線程是可見的。

例如:Thread A的修改對Thread B 不可見(A膀值、B訪問同一個對象)

原始counter = 0;

A線程先執(zhí)行了counter++ ;但是B線程卻打印counter=0(正確情況應該是1)棍丐,那可能是因為A對counter的修改于B時不可見的,A沧踏、B之間并沒有建立起happens-before的關系歌逢。

解決方法:線程之間建立happens-before關系(比如使用join())。

5翘狱、同步方法

a秘案、需要有一個共同的對象

b、不能用在構造方法上潦匈,因為線程需要先創(chuàng)建對象然后再使用它阱高。即便如此,也需要避免對象過早泄露茬缩。例如在構造函數中使用instances.add(this)赤惊,在構造對象完成之前,其他的線程已經能夠通過instances訪問該對象凰锡。

final類型的變量未舟,對非同步方法而言是讀安全的,但是有可能會引起liveness的問題寡夹。

c处面、實現機制是使用了內部鎖(監(jiān)視鎖),來達到以下目的

1菩掏、強制對引用對象的獨占訪問

2魂角、建立起happens-before關系

d、如果同步方法是static的智绸,鎖為Class對象

6野揪、同步方法塊

a、需要指定一個對象充當內部鎖

b瞧栗、支持重入同步(同步方法塊中的代碼又調用了其他同步代碼塊中的代碼斯稳,而且都使用相同的鎖,循允許線程多次獲得同一把鎖來避免自身將自身阻塞)迹恐。

7挣惰、原子操作

1、操作要么完整執(zhí)行,要么根本不執(zhí)行憎茂,不存在中途停止執(zhí)行的情況珍语。

2、c++不是原子操作

3竖幔、原子操作不存在線程干擾問題板乙,但是有可能出現內存不一致問題。

4拳氢、所有的引用變量以及基本數據類型變量(除了long募逞、double)的讀寫操作都是原子操作。

5馋评、所有被volatile修飾的變量(包括long放接、double)的讀寫操作都是原子操作。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末栗恩,一起剝皮案震驚了整個濱河市透乾,隨后出現的幾起案子,更是在濱河造成了極大的恐慌磕秤,老刑警劉巖乳乌,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異市咆,居然都是意外死亡汉操,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門蒙兰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磷瘤,“玉大人,你說我怎么就攤上這事搜变〔筛浚” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵挠他,是天一觀的道長扳抽。 經常有香客問我,道長殖侵,這世上最難降的妖魔是什么贸呢? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮拢军,結果婚禮上楞陷,老公的妹妹穿的比我還像新娘。我一直安慰自己茉唉,他們只是感情好固蛾,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布结执。 她就那樣靜靜地躺著,像睡著了一般魏铅。 火紅的嫁衣襯著肌膚如雪昌犹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天览芳,我揣著相機與錄音,去河邊找鬼鸿竖。 笑死沧竟,一個胖子當著我的面吹牛,可吹牛的內容都是我干的缚忧。 我是一名探鬼主播悟泵,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闪水!你這毒婦竟也來了糕非?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤球榆,失蹤者是張志新(化名)和其女友劉穎朽肥,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體持钉,經...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡衡招,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了每强。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片始腾。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖空执,靈堂內的尸體忽然破棺而出浪箭,到底是詐尸還是另有隱情,我是刑警寧澤辨绊,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布奶栖,位于F島的核電站,受9級特大地震影響邢羔,放射性物質發(fā)生泄漏驼抹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一拜鹤、第九天 我趴在偏房一處隱蔽的房頂上張望框冀。 院中可真熱鬧,春花似錦敏簿、人聲如沸明也。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽温数。三九已至绣硝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撑刺,已是汗流浹背鹉胖。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留够傍,地道東北人甫菠。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像冕屯,于是被迫代替她去往敵國和親寂诱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內容

  • 原文鏈接 譯者:靖靖 并發(fā) 進程和線程 在并發(fā)編程當中安聘,有兩個基本的執(zhí)行單元:進程和線程痰洒。在java中,我們大部分...
    4b4f3ceb6f71閱讀 807評論 4 16
  • 一浴韭、并發(fā) 進程:每個進程都擁有自己的一套變量 線程:線程之間共享數據 1.線程 Java中為多線程任務提供了很多的...
    SeanMa閱讀 2,460評論 0 11
  • 本文出自 Eddy Wiki 丘喻,轉載請注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 2,127評論 0 14
  • 本文主要講了java中多線程的使用方法、線程同步囱桨、線程數據傳遞仓犬、線程狀態(tài)及相應的一些線程函數用法、概述等舍肠。 首先講...
    李欣陽閱讀 2,456評論 1 15
  • 宋代的沈括《筆溪夢談》里搀继,提到一種紫草,可以做藥翠语,也可以染色叽躯。他說:“如今之紫草,未花時采肌括〉闫铮”短短幾個字,這花將開...
    仙肚瑞拉閱讀 444評論 4 6