Java中volatile和synchronized的區別

csbison發表於2005-08-22

volatilesynchronized的區別:


1.volatile
本質是在告訴jvm當前變數在暫存器(工作記憶體)中的值是不確定的,需要從主存中讀取;synchronized則是鎖定當前變數,只有當前執行緒可以訪問該變數,其他執行緒被阻塞住。
2.volatile
僅能使用在變數級別;synchronized則可以使用在變數、方法、和類級別的

3.volatile
僅能實現變數的修改可見性,並能保證原子性;而synchronized則可以保證變數的修改可見性和原子性

4.volatile
不會造成執行緒的阻塞;synchronized可能會造成執行緒的阻塞。

5.volatile
標記的變數不會被編譯器優化;synchronized標記的變數可以被編譯器優化

 

相關文章