Java并發(fā)機制的底層實現(xiàn)原理-對應Java并發(fā)編程的藝術第二章

volatile

被volatile修飾的共享變量進行寫操作的時候,字節(jié)碼中會出現(xiàn)一個Lock前綴的指令。

  • volatile的兩條實現(xiàn)原則
    1、 Lock前綴指令會引起處理器緩存會寫到內(nèi)存
    2、 處理器緩存回寫到內(nèi)存會導致其他處理器的緩存無效
    這里其實就是緩存一致性協(xié)議的體現(xiàn)。
  • volatile的優(yōu)化
    追加字節(jié)的方式

synchronized

鎖的對象分為三種:
1、普通同步方法而言,鎖是當前實例對象
2、靜態(tài)同步方法而言,鎖是當前類的class對象
3、同步方法塊,鎖是Synchronized括號里配置的對象

JVM基于進入和退出Monitor對象來實現(xiàn)方法同步和代碼塊同步,實現(xiàn)細節(jié)不一樣
synchronized用的鎖是存在java對象頭里面的
鎖一共有4種狀態(tài):無鎖-》偏向鎖-》輕量級鎖-》重量級鎖,所可以升級但是不能降級

原子操作的實現(xiàn)原理

處理器通過總線鎖和緩存鎖實現(xiàn)原子操作。
但是有兩種情況處理器不會使用緩存鎖:
1、當操作的數(shù)據(jù)不能被緩存在處理器內(nèi)部,或者操作的數(shù)據(jù)跨多個緩存行
2、有些處理器不支持緩存鎖定

Java如何實現(xiàn)原子操作:
通過鎖和循環(huán)CAS的方式實現(xiàn)原子操作

CAS實現(xiàn)原子操作的三大問題:
1、ABA問題---解決辦法:加版本號
2、循環(huán)時間長開銷大
3、只能保證一個共享變量的原子操作

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

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

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