volatile和synchronized的區別與聯系?
volatile和synchronized的區別:
1.volatile本質是在告訴jvm當前變量在寄存器(工作內存)中的值是不確定的,需要從主存中讀取;synchronized則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住。
2.volatile僅能使用在變量級別;synchronized則可以使用在變量、方法、和類級別的。
3.volatile僅能實現變量的修改可見性,并能保證原子性;而synchronized則可以保證變量的修改可見性和原子性。
4.volatile不會造成線程的阻塞;synchronized可能會造成線程的阻塞。
5.volatile標記的變量不會被編譯器優化;synchronized標記的變量可以被編譯器優化。