JAVA-每日問題匯總

findBug工具-Synchronization 相關(guān)問題的解決

1. findBug工具-Synchronization on Boolean(在Boolean類型的對象上使用了Synchronize關(guān)鍵字)

Bug原因:
   在出現(xiàn)并發(fā)時,通過同步鎖使得只能由一個線程延遲加載一個或一組對象供后續(xù)使用(例如一個巨大的List或需要緩存的對象等等)。 然而,此前竟然從未意識到可能存在的嚴(yán)重問題西壮。
  其中,規(guī)則制定者一書的作者認(rèn)為錯誤地在基本類型上使用synchronize關(guān)鍵字是導(dǎo)致并發(fā)問題的常見原因之一楣嘁,可能導(dǎo)致死鎖或其他不可預(yù)測的結(jié)果挤庇,并將其抽象為不應(yīng)該在任何可能被重用的對象[包括可能在JVM內(nèi)部重用的對象]上使用.
  即Boolean類型的對象不可用于synchronization同步鎖寂祥。其問題的實(shí)質(zhì)在于Boolean.TRUE和Boolean.FALSE這兩個常量在JVM中實(shí)際是java.lang.Boolean類的兩個靜態(tài)成員變量顷啼,因而可能在程序中被多處引用踏枣。例如小压,當(dāng)上例中的inited指向Boolean.FALSE時,如果有其他的同步代碼塊在無意中使用了相同的Boolean常量椰于,那么就有可能導(dǎo)致死鎖。

2. findBug工具-Synchronizes on a boxed primitive object(在裝箱基本類型的對象上使用了Synchronize關(guān)鍵字)


  上述代碼將int類型的count自動裝箱為Interger包裝類型的對象Lock仪搔,然后使用synchronize關(guān)鍵字對包裝類型的Lock變量加鎖瘾婿。可以預(yù)見烤咧,出于存儲和性能等等的考慮偏陪,在自動裝箱時JVM內(nèi)部必然會重用具有相同值類型的包裝類,因而Lock指向的對象極有可能被重用煮嫌,進(jìn)而在后續(xù)引發(fā)與Boolean類型變量存在的相同問題

3. findBug工具-Synchronizes on a interned String lock object(在內(nèi)部字符串對象上使用了Synchronize關(guān)鍵字)


  根據(jù)Java API文檔笛谦,intern()方法實(shí)際是返回對象池中的對象,因而調(diào)用intern()方法后獲得到對象相當(dāng)于JVM中的一個全局變量昌阿。
  所以饥脑,即便是像上述錯誤代碼中使用private和final關(guān)鍵字修飾lock變量,lock變量指向的仍然是同一個可能被重用的字符串常量懦冰。這種情況所帶來的問題與之前提到的兩種問題類似灶轰。

4. findBug工具-Synchronizes on a String Literal(在字符串常量上使用了Synchronize關(guān)鍵字)


  基于之前的解釋很容易理解第四種情況,即JVM中的字符串常量是全局重用的刷钢。

終極解決方案

  1. 使用字符串實(shí)例

  與字符串常量不同笋颤,字符串實(shí)例的引用是唯一的,因而不存在字符串常量可能導(dǎo)致的問題内地。

  1. 使用private final類型的java.lang.Object

  CERT規(guī)范中提到伴澄,這種解決方法是少數(shù)可以直接利用到j(luò)ava.lang.Object的情況。在此處之所以強(qiáng)調(diào)使用Raw Object阱缓,同時還在CERT規(guī)范的原文中多次提到《Use private final lock objects to synchronize classes that may interact with untrusted code》非凌,是由于不使用Raw Object可能導(dǎo)致被exploit的問題,在此不再贅述茬祷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末清焕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子祭犯,更是在濱河造成了極大的恐慌秸妥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沃粗,死亡現(xiàn)場離奇詭異粥惧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)最盅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門突雪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來起惕,“玉大人,你說我怎么就攤上這事咏删∪窍耄” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵督函,是天一觀的道長嘀粱。 經(jīng)常有香客問我,道長辰狡,這世上最難降的妖魔是什么锋叨? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮宛篇,結(jié)果婚禮上娃磺,老公的妹妹穿的比我還像新娘。我一直安慰自己叫倍,他們只是感情好偷卧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吆倦,像睡著了一般涯冠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逼庞,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天蛇更,我揣著相機(jī)與錄音,去河邊找鬼赛糟。 笑死派任,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的璧南。 我是一名探鬼主播掌逛,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼司倚!你這毒婦竟也來了豆混?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤动知,失蹤者是張志新(化名)和其女友劉穎皿伺,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盒粮,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸵鸥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妒穴。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡宋税,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出讼油,到底是詐尸還是另有隱情杰赛,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布矮台,位于F島的核電站淆攻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嘿架。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一啸箫、第九天 我趴在偏房一處隱蔽的房頂上張望耸彪。 院中可真熱鬧,春花似錦忘苛、人聲如沸蝉娜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽召川。三九已至,卻和暖如春胸遇,著一層夾襖步出監(jiān)牢的瞬間荧呐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工纸镊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倍阐,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓逗威,卻偏偏與公主長得像峰搪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凯旭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法概耻,類相關(guān)的語法,內(nèi)部類的語法罐呼,繼承相關(guān)的語法鞠柄,異常的語法,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 轉(zhuǎn)自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帥199207閱讀 8,522評論 3 93
  • (一)Java部分 1嫉柴、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,104評論 0 62
  • 作為一個在小城市里工作穩(wěn)定年近三十的大齡姑娘春锋,沒有結(jié)婚甚至沒有談婚論嫁足以讓人在背后指手畫腳,也足以讓家中父母憂心...
    棲樹閱讀 2,237評論 47 39
  • 在實(shí)際生產(chǎn)中差凹,軟件廠商并不總會提供針對Linux平臺的rpm軟件包期奔,有時會以源碼的形式發(fā)布軟件侧馅。源碼,比如c語言的...
    KingFighting閱讀 595評論 0 1