valatile
被volatile修飾的共享變量保證不同線程對于此變量進行操作時的可見性,即一個線程修改了某個變量的值,這新值對于其他線程來說是立即可見的,并且將會禁止進行指令重排序。
其本質是告訴jvm當前變量在寄存器中的值是不確定的,需從主內存中讀取。
synchronized
當它使用在變量上時,將會鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞。
synchronized和volatile的區別
1.volatile僅能使用在變量級別,synchronized則可以使用在變量、方法、類級別上。
2.volatile僅僅能實現變量修改可見性,并不能保證原子性,synchronized可以實現變量的修改可見性和原子性。
3.volatile不會造成線程阻塞,synchronized可能會造成線程阻塞。
4.volatile標記的變量不會被編譯器優化,synchronized標記的變量可以被編譯器優化。