Java關(guān)鍵字synchronized和volatile的區(qū)別

一旦一個共享變量(類的成員變量、類的靜態(tài)成員變量)被volatile修飾自后,就具備了兩層含義:
(1).保證不同線程對該變量進(jìn)行操作時的可見性,即一個線程修改了變量的值,新值對其他線程來說是立即可見的
(2).禁止進(jìn)行指令重排序

Volatile本職是告訴jvm當(dāng)前變量在寄存器(內(nèi)存)中的值是不確定的,需要從主存中讀取。synchronized則是鎖定當(dāng)前變量,只有當(dāng)前線程可以訪問該變量,其他線程被阻塞

a.volatile僅能使用在變量上;synchronized可以使用在變量、方法、類上
b.volatile僅能實現(xiàn)變量的修改可見性,不能保證原子性;synchronized則可以保證變量的修改可見性和原子性
c.volatile不會造成線程的阻塞;synchronized可能會造成線程的阻塞
d.volatile標(biāo)記的變量不會被編譯器優(yōu)化;synchronized標(biāo)記的變量可以被編譯器優(yōu)化

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

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

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