synchronized和volatile

一旦一個共享變量(類的成員變量、類的靜態成員變量)被volatile修飾後,會保證不同線程對這個變量進行操作時的可見性,即一個線程修改了某個變量後是立即可見的。另外會禁止指令重排序。

volatile本質是告訴jvm當前變量在寄存器中的值不確定,需要從主存中讀取。

synchronized是鎖定當前變量,只有當前線程可以訪問該變量。

1.volatile僅能使用在變量級別:

    synchronized則是用在變量,方法,類級別的

2.volatile僅能實現變量修改的可見性,並不能保證原子性;

 synchronized可以保證變量修改的可見性和原子性

3.volatile不會造成線程的阻塞

synchronized可能造成線程的阻塞

4.volatile標記的變量不會被編譯器優化

synchronized標記的變量會被編譯器優化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章