面試系列——線程安全


有一次去面試的時候,碰到這樣一個問題邪意,現(xiàn)在我有一個類Person,里面有set和get兩個方法反砌,現(xiàn)在我用多線程訪問這兩個方法雾鬼,怎么保證線程安全。答:syn關鍵字宴树,但是syn關鍵字的參數(shù)如果默認this的話策菜,那么不能保證線程安全,傳遞Person才能保證。

首先做入,對于synchronized關鍵字冒晰,它的機制大概是這個樣子的:synchronized以對象實例或者class對象為鎖,如果synchronized修飾的是方法竟块,首先鎖默認class對象壶运,想要訪問這個方法,那么必須拿到這個鎖浪秘,由于鎖的唯一性(class對象的唯一性決定的)蒋情,所以一次性只能有一個線程訪問這個方法,vector使用的就是使用synchronized修飾了方法耸携。如果synchronized修飾的是代碼塊棵癣,那么需要傳遞一個參數(shù)進去,如果參數(shù)傳遞this夺衍,那么鎖的對象就是當前對象狈谊,如果傳遞的是其他對象實例,那么鎖就是其他對象沟沙。鎖的不同其實決定了線程的安全性河劝。話不多說,上代碼:



矛紫、

對于這一段代碼而言赎瞎,線程安全嗎?vector本身是線程安全的颊咬,但是調(diào)用者不是务甥。這段代碼其實是在深入理解java虛擬機第二版的389頁中喳篇,會出現(xiàn)以下的異常


雖然其出現(xiàn)的概率不高,但是會有這種問題存在。那么問題的本質(zhì)在哪里呢,vector不是線程安全的嗎蜗细?這里不詳細敘述原理踪区,但是問題在于i這個變量缎岗,這是發(fā)生錯誤的場景i<vector.size()判定通過传泊,此時線程執(zhí)行時間結束,保存當前狀態(tài)切換,而此時校读,另一個線程剛好執(zhí)行了remove,跳轉(zhuǎn)回來以后,i的值是已經(jīng)通過判定的却特,但是i其實已經(jīng)過期了,所以此時會報錯。對于不熟悉synchronized的人來說仙蛉,他可能會這么寫

但是其實這么寫完全沒有用(不僅僅沒有解決當前問題夯巷,反而大大降低了程序執(zhí)行的效率),問題出在哪里篮绰,鎖對象喷面。下面是正確的寫法:


這段代碼完美解決了線程安全的問題盒齿,接近或者達到了絕對線程安全的地步边翁,但是效率比上面那段錯誤的代碼還要低。其實還有一種鎖機制ReentrantLock硕盹,這個就不在這里講了符匾。會另外出一篇博客。

其實最開始提出的問題還有一種解決方法瘩例,那就是用syn修飾Person的set()和get()方法啊胶,如果你還用vector并且用的很多,那么這種方法可以使用垛贤,如果你追求更好的效率焰坪,那么請直接舍棄這種方法,因為set和get中的操作一般都很簡單聘惦,加入了鎖那么這個類的操作效率會很低很低某饰。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市善绎,隨后出現(xiàn)的幾起案子黔漂,更是在濱河造成了極大的恐慌,老刑警劉巖禀酱,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炬守,死亡現(xiàn)場離奇詭異,居然都是意外死亡比勉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浩聋,“玉大人观蜗,你說我怎么就攤上這事∫陆啵” “怎么了墓捻?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坊夫。 經(jīng)常有香客問我砖第,道長,這世上最難降的妖魔是什么环凿? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任梧兼,我火速辦了婚禮,結果婚禮上智听,老公的妹妹穿的比我還像新娘羽杰。我一直安慰自己,他們只是感情好到推,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布考赛。 她就那樣靜靜地躺著,像睡著了一般莉测。 火紅的嫁衣襯著肌膚如雪颜骤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天捣卤,我揣著相機與錄音忍抽,去河邊找鬼。 笑死腌零,一個胖子當著我的面吹牛梯找,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播益涧,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锈锤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了闲询?” 一聲冷哼從身側(cè)響起久免,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扭弧,沒想到半個月后阎姥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡鸽捻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年呼巴,在試婚紗的時候發(fā)現(xiàn)自己被綠了泽腮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡衣赶,死狀恐怖诊赊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情府瞄,我是刑警寧澤碧磅,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站遵馆,受9級特大地震影響鲸郊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜货邓,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一秆撮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逻恐,春花似錦像吻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挽拂,卻和暖如春惭每,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亏栈。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工台腥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绒北。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓黎侈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親闷游。 傳聞我的和親對象是個殘疾皇子峻汉,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

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

  • 從三月份找實習到現(xiàn)在,面了一些公司脐往,掛了不少休吠,但最終還是拿到小米、百度业簿、阿里瘤礁、京東、新浪梅尤、CVTE柜思、樂視家的研發(fā)崗...
    時芥藍閱讀 42,246評論 11 349
  • 1. Java基礎部分 基礎部分的順序:基本語法岩调,類相關的語法,內(nèi)部類的語法赡盘,繼承相關的語法誊辉,異常的語法,線程的語...
    子非魚_t_閱讀 31,630評論 18 399
  • 本文出自 Eddy Wiki 亡脑,轉(zhuǎn)載請注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 2,120評論 0 14
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,104評論 0 62
  • 轉(zhuǎn)自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帥199207閱讀 8,520評論 3 93