synchronized和volatile的作用和區(qū)別

valatile

被volatile修飾的共享變量保證不同線程對(duì)于此變量進(jìn)行操作時(shí)的可見性,即一個(gè)線程修改了某個(gè)變量的值,這新值對(duì)于其他線程來說是立即可見的,并且將會(huì)禁止進(jìn)行指令重排序。

其本質(zhì)是告訴jvm當(dāng)前變量在寄存器中的值是不確定的,需從主內(nèi)存中讀取。

synchronized

當(dāng)它使用在變量上時(shí),將會(huì)鎖定當(dāng)前變量,只有當(dāng)前線程可以訪問該變量,其他線程被阻塞。

synchronized和volatile的區(qū)別

1.volatile僅能使用在變量級(jí)別,synchronized則可以使用在變量、方法、類級(jí)別上。

2.volatile僅僅能實(shí)現(xiàn)變量修改可見性,并不能保證原子性,synchronized可以實(shí)現(xiàn)變量的修改可見性和原子性。

3.volatile不會(huì)造成線程阻塞,synchronized可能會(huì)造成線程阻塞。

4.volatile標(biāo)記的變量不會(huì)被編譯器優(yōu)化,synchronized標(biāo)記的變量可以被編譯器優(yōu)化。

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

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

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