2018-10-23volatile和synchronized及多線程面試題

1 Java中的volatile關(guān)鍵是什么作用爬立?怎樣使用它谭网?在Java中它跟synchronized方法有什么不同歧胁?

自從Java 5和Java內(nèi)存模型改變以后,基于volatile關(guān)鍵字的線程問題越來越流行修噪。應(yīng)該準(zhǔn)備好回答關(guān)于volatile變量怎樣在并發(fā)環(huán)境中確保可見性路媚。

volatile關(guān)鍵字的作用是:保證變量的可見性黄琼。

在java內(nèi)存結(jié)構(gòu)中,每個(gè)線程都是有自己獨(dú)立的內(nèi)存空間(此處指的線程棧)整慎。當(dāng)需要對(duì)一個(gè)共享變量操作時(shí)脏款,線程會(huì)將這個(gè)數(shù)據(jù)從主存空間復(fù)制到自己的獨(dú)立空間內(nèi)進(jìn)行操作,然后在某個(gè)時(shí)刻將修改后的值刷新到主存空間裤园。這個(gè)中間時(shí)間就會(huì)發(fā)生許多奇奇怪怪的線程安全問題了撤师,volatile就出來了,它保證讀取數(shù)據(jù)時(shí)只從主存空間讀取拧揽,修改數(shù)據(jù)直接修改到主存空間中去剃盾,這樣就保證了這個(gè)變量對(duì)多個(gè)操作線程的可見性了。換句話說强法,被volatile修飾的變量万俗,能保證該變量的 單次讀或者單次寫 操作是原子的。

但是線程安全是兩方面需要的 原子性(指的是多條操作)和可見性饮怯。volatile只能保證可見性闰歪,synchronized是兩個(gè)均保證的。

volatile輕量級(jí)蓖墅,只能修飾變量库倘;synchronized重量級(jí),還可修飾方法论矾。

volatile不會(huì)造成線程的阻塞教翩,而synchronized可能會(huì)造成線程的阻塞。

2 為什么我們調(diào)用start()方法時(shí)會(huì)執(zhí)行run()方法贪壳,為什么我們不能直接調(diào)用run()方法饱亿?

這是另一個(gè)非常經(jīng)典的java多線程面試問題。這也是我剛開始寫線程程序時(shí)候的困惑∪蜓ィ現(xiàn)在這個(gè)問題通常在電話面試或者是在初中級(jí)Java面試的第一輪被問到彪笼。這個(gè)問題的回答應(yīng)該是這樣的,當(dāng)你調(diào)用start()方法時(shí)你將創(chuàng)建新的線程蚂且,并且執(zhí)行在run()方法里的代碼配猫。但是如果你直接調(diào)用run()方法,它不會(huì)創(chuàng)建新的線程也不會(huì)執(zhí)行調(diào)用線程的代碼杏死。

3?什么是不可變對(duì)象泵肄,它對(duì)寫并發(fā)應(yīng)用有什么幫助捆交?

另一個(gè)多線程經(jīng)典面試問題,并不直接跟線程有關(guān)腐巢,但間接幫助很多品追。這個(gè)java面試問題可以變的非常棘手,如果他要求你寫一個(gè)不可變對(duì)象系忙,或者問你為什么String是不可變的诵盼。

immutable Objects(不可變對(duì)象)就是那些一旦被創(chuàng)建惠豺,它們的狀態(tài)就不能被改變的Objects银还,每次對(duì)他們的改變都是產(chǎn)生了新的immutable的對(duì)象,而mutable Objects(可變對(duì)象)就是那些創(chuàng)建后洁墙,狀態(tài)可以被改變的Objects.

如何在Java中寫出Immutable的類蛹疯?

1. immutable對(duì)象的狀態(tài)在創(chuàng)建之后就不能發(fā)生改變,任何對(duì)它的改變都應(yīng)該產(chǎn)生一個(gè)新的對(duì)象热监。

2. immutable類的所有的屬性都應(yīng)該是final的捺弦。

3. 對(duì)象必須被正確的創(chuàng)建,比如:對(duì)象引用在對(duì)象創(chuàng)建過程中不能泄露(leak)孝扛。

4. 對(duì)象應(yīng)該是final的列吼,以此來限制子類繼承父類,以避免子類改變了父類的immutable特性苦始。

5. 如果類中包含mutable類對(duì)象寞钥,那么返回給客戶端的時(shí)候,返回該對(duì)象的一個(gè)拷貝陌选,而不是該對(duì)象本身(該條可以歸為第一條中的一個(gè)特例)

使用Immutable類的好處:

1. Immutable對(duì)象是線程安全的理郑,可以不用被synchronize就在并發(fā)環(huán)境中共享

2.Immutable對(duì)象簡(jiǎn)化了程序開發(fā),因?yàn)樗鼰o需使用額外的鎖機(jī)制就可以在線程間共享

3. Immutable對(duì)象提高了程序的性能咨油,因?yàn)樗鼫p少了synchroinzed的使用

4. Immutable對(duì)象是可以被重復(fù)使用的您炉,你可以將它們緩存起來重復(fù)使用,就像字符串字面量和整型數(shù)字一樣役电。你可以使用靜態(tài)工廠方法來提供類似于valueOf()這樣的方法赚爵,它可以從緩存中返回一個(gè)已經(jīng)存在的Immutable對(duì)象,而不是重新創(chuàng)建一個(gè)法瑟。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冀膝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瓢谢,更是在濱河造成了極大的恐慌畸写,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氓扛,死亡現(xiàn)場(chǎng)離奇詭異枯芬,居然都是意外死亡论笔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門千所,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狂魔,“玉大人,你說我怎么就攤上這事淫痰∽羁” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵待错,是天一觀的道長籽孙。 經(jīng)常有香客問我,道長火俄,這世上最難降的妖魔是什么犯建? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮瓜客,結(jié)果婚禮上适瓦,老公的妹妹穿的比我還像新娘。我一直安慰自己谱仪,他們只是感情好玻熙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疯攒,像睡著了一般嗦随。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卸例,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天称杨,我揣著相機(jī)與錄音,去河邊找鬼筷转。 笑死姑原,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呜舒。 我是一名探鬼主播锭汛,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼袭蝗!你這毒婦竟也來了唤殴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤到腥,失蹤者是張志新(化名)和其女友劉穎朵逝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乡范,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡配名,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年啤咽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渠脉。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宇整,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芋膘,到底是詐尸還是另有隱情鳞青,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布为朋,位于F島的核電站臂拓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏潜腻。R本人自食惡果不足惜埃儿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望融涣。 院中可真熱鬧,春花似錦精钮、人聲如沸威鹿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忽你。三九已至,卻和暖如春臂容,著一層夾襖步出監(jiān)牢的瞬間科雳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工脓杉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糟秘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓球散,卻偏偏與公主長得像尿赚,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蕉堰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • 內(nèi)容簡(jiǎn)介: 曾經(jīng)有個(gè)出身門第算命之家的子弟凌净,一心想繼承祖上家業(yè),但是祖宗定下規(guī)矩屋讶,到父親這一代就要截止冰寻,后代不能從...
    Andy言午閱讀 467評(píng)論 4 1
  • 匆匆的離別 執(zhí)手相看淚眼的痛 記憶深處奇妙的緣 塵封一段情 任時(shí)光飛逝 任歲月凋零 在靈魂出竅的地方 有你我相隨的...
    谷雨666閱讀 146評(píng)論 0 0
  • 小米下了夜班早上八半回到家约计,邊洗腳邊刷手機(jī)。 其實(shí)這個(gè)手機(jī)她已經(jīng)刷了一夜了迁筛。 夜班是晚上0點(diǎn)到早上8點(diǎn)煤蚌,不允許睡覺...
    易秋寒閱讀 287評(píng)論 0 1