什么是線程安全幻馁?

? ? ? ?在網(wǎng)上搜到很多關于什么是線程安全的概念洗鸵,找到的一般都是類似于下面的概念:“如果一個對象可以完全地被多個線程同時使用,那它就是線程安全的”仗嗦,這樣的定義不能說不正確膘滨,可是我們卻無法從中獲取到任何有用的信息。

? ? ? ?在<<深入Java虛擬機>>中看到的定義就嚴謹?shù)亩嘞」铡T娜缦拢?/p>

? ? ? ? 當多個線程訪問同一個對象時火邓,如果不用考慮這些線程在運行時環(huán)境下的調(diào)度和交替運行,也不需要進行額外的同步德撬,或者在調(diào)用方進行任何其他的協(xié)調(diào)操作铲咨,調(diào)用這個對象的行為都可以獲取正確的結(jié)果,那這個對象是線程安全的蜓洪。

? ? ? ? ?為了更加深入理解線程安全鸣驱,我們可以按照線程安全的“安全強度”由強至弱來排序,我們可以將Java語言中各種操作共享的數(shù)據(jù)分為以下5類:不可變蝠咆、絕對線程安全、相對線程安全北滥、線程兼容和線程對立刚操。

1、不可變

不可變的對象一定是線程安全的再芋,并且永遠也不需要額外的同步菊霜。因為一個不可變的對象只要構建正確,其外部可見狀態(tài)永遠也不會改變济赎,永遠也不會看到它處于不一致的狀態(tài)鉴逞。Java

類庫中大多數(shù)基本數(shù)值類如Integer、String和BigInteger都是不可變的司训。

2构捡、線程安全

由類的規(guī)格說明所規(guī)定的約束在對象被多個線程訪問時仍然有效,不管運行時環(huán)境如何排列壳猜,線程都不需要任何額外的同步勾徽。這種線程安全性保證是很嚴格的——許多類,如Hashtable

或者 Vector 都不能滿足這種嚴格的定義统扳。

3喘帚、有條件的線程安全(相對線程安全)

有條件的線程安全類對于單獨的操作可以是線程安全的,但是某些操作序列可能需要外部同步咒钟。條件線程安全的最常見的例子是遍歷由 Hashtable 或者 Vector 或者返回的迭代器——由這些類返回的 fail-fast 迭代器假定在迭代器進行遍歷的時候底層集合不會有變化吹由。為了保證其他線程不會在遍歷的時候改變集合,進行迭代的線程應該確保它是獨占性地訪問集合以實現(xiàn)遍歷的完整性朱嘴。通常倾鲫,獨占性的訪問是由對鎖的同步保證的——并且類的文檔應該說明是哪個鎖(通常是對象的內(nèi)部監(jiān)視器(intrinsic monitor))。

如果對一個有條件線程安全類進行記錄,那么您應該不僅要記錄它是有條件線程安全的级乍,而且還要記錄必須防止哪些操作序列的并發(fā)訪問舌劳。用戶可以合理地假設其他操作序列不需要任何額外的同步。

4玫荣、線程兼容

線程兼容類不是線程安全的甚淡,但是可以通過正確使用同步而在并發(fā)環(huán)境中安全地使用。這可能意味著用一個synchronized 塊包圍每一個方法調(diào)用捅厂,或者創(chuàng)建一個包裝器對象贯卦,其中每一個方法都是同步的(就像 Collections.synchronizedList() 一樣)。也可能意味著用synchronized 塊包圍某些操作序列焙贷。為了最大程度地利用線程兼容類撵割,如果所有調(diào)用都使用同一個塊,那么就不應該要求調(diào)用者對該塊同步辙芍。這樣做會使線程兼容的對象作為變量實例包含在其他線程安全的對象中啡彬,從而可以利用其所有者對象的同步。

許多常見的類是線程兼容的故硅,如集合類 ArrayList 和 HashMap 庶灿、java.text.SimpleDateFormat 、或者 JDBC 類 Connection 和 ResultSet 吃衅。

5往踢、線程對立

線程對立是那些不管是否采用了同步措施,都不能在多線程環(huán)境中并發(fā)使用的代碼徘层。線程對立很少見峻呕,而且通常都是有害的,應當盡量避免趣效。

? ? ? ?一個線程對立的例子是Thread類的suspend()和resume()方法瘦癌,如果有兩個線程同時持有一個線程對象,一個嘗試去中斷線程跷敬,另一個嘗試去恢復線程佩憾,如果并發(fā)進行的話,無論調(diào)用時是否進行了同步干花,目標線程都是存在死鎖風險的妄帘,如果suspend()中斷的線程就是即將要執(zhí)行resume()的那個線程,那就肯定要產(chǎn)生死鎖了池凄。也正是由于這個原因抡驼,suspend()和resume()方法已經(jīng)被JDK聲明廢棄了。常見的線程對立的操作還有System.setIn(),System.setOut()和System.runFinalizersOnExit()等肿仑。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末致盟,一起剝皮案震驚了整個濱河市碎税,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馏锡,老刑警劉巖雷蹂,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異杯道,居然都是意外死亡匪煌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門党巾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萎庭,“玉大人,你說我怎么就攤上這事齿拂〔倒妫” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵署海,是天一觀的道長吗购。 經(jīng)常有香客問我,道長砸狞,這世上最難降的妖魔是什么捻勉? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮趾代,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丰辣。我一直安慰自己撒强,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布笙什。 她就那樣靜靜地躺著飘哨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪琐凭。 梳的紋絲不亂的頭發(fā)上芽隆,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音统屈,去河邊找鬼胚吁。 笑死,一個胖子當著我的面吹牛愁憔,可吹牛的內(nèi)容都是我干的腕扶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼吨掌,長吁一口氣:“原來是場噩夢啊……” “哼半抱!你這毒婦竟也來了脓恕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤窿侈,失蹤者是張志新(化名)和其女友劉穎炼幔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體史简,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡乃秀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了乘瓤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片环形。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖衙傀,靈堂內(nèi)的尸體忽然破棺而出抬吟,到底是詐尸還是另有隱情,我是刑警寧澤统抬,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布火本,位于F島的核電站,受9級特大地震影響聪建,放射性物質(zhì)發(fā)生泄漏钙畔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一金麸、第九天 我趴在偏房一處隱蔽的房頂上張望擎析。 院中可真熱鬧,春花似錦挥下、人聲如沸揍魂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽现斋。三九已至,卻和暖如春偎蘸,著一層夾襖步出監(jiān)牢的瞬間杠输,已是汗流浹背嫩絮。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工埋涧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留垄潮,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓章咧,卻偏偏與公主長得像蔗包,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子慧邮,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎部分 基礎部分的順序:基本語法调限,類相關的語法舟陆,內(nèi)部類的語法,繼承相關的語法耻矮,異常的語法秦躯,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 線程安全概念:當多個線程訪問某個類(對象或方法)時,這個類始終都能表現(xiàn)出正確的行為裆装,那么這個類就是線程安全的踱承。sy...
    絕世懶人閱讀 273評論 0 1
  • 走在管廊下,管線綿延感哨免,管廊支架又像一道道門茎活,像打怪升級的感,不禁想到路漫漫其修遠兮琢唾!再次感受下工業(yè)力量之美T乩蟆(學...
    王秉文閱讀 332評論 0 0
  • number:整數(shù)4字節(jié),浮點數(shù)8字節(jié)string:每個字符2個字節(jié)采桃;
    zhang22bin閱讀 162評論 0 0
  • 沒帶日記本懒熙,就在這里發(fā)發(fā)牢騷吧! 現(xiàn)在最大的感受就是:“我多么渴望純粹的做個學生啊”普办。人年輕的時候總會有很多想法工扎,...
    智仙runner閱讀 264評論 0 1