對象及變量的并發(fā)訪問

非線程安全會在多個線程對同一個對象的實例進(jìn)行并發(fā)訪問時產(chǎn)生,產(chǎn)生的后果就是臟讀,也就是取到的數(shù)據(jù)其實是被更改過的。而線程安全就是對獲得的實例變量的值進(jìn)行同步處理,不會出現(xiàn)臟讀的現(xiàn)象。

  • 方法內(nèi)的變量為線程安全
    方法內(nèi)部的私有變量,不存在非線程安全問題,這是由于每個線程都有各自的棧
  • 實例變量非線程安全
    如果兩個線程同時訪問一個沒有同步的方法 ,同時操作業(yè)務(wù)對象中的實例變量,則有可能出現(xiàn)非線程安全問題。
  • 多個對象多個鎖
    如果兩個線程訪問同一個類的兩個不同實例的相同名稱的同步方法,效果卻是異步方式執(zhí)行的。
圖片.png
  • synchronized鎖重入
    當(dāng)一個線程得到一個對象鎖后,再請求此對象鎖時是可以再次得到該對象的鎖的,這也證明在一個synchronized方法內(nèi)部調(diào)用本類的其他sychronized方法/塊時,是永遠(yuǎn)可以得到鎖的。
  • 出現(xiàn)異常,鎖自動釋放
    當(dāng)一個線程執(zhí)行的代碼出現(xiàn)異常時,其所持有的鎖會自動釋放

volatitle關(guān)鍵字

關(guān)鍵字vilatile的主要作用是使變量在多個線程間可見
volatile的作用是強(qiáng)制從公共堆棧中取得變量的值,而不是從線程私有棧中取得變量的值。線程安全包括可見性和原子性,volatile可以保證可見性,但不能保證原子性。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容