synchronized和volatile的區別

小墨di發表於2019-02-20
  • 1.volatile本質:是java虛擬機器(JVM)當前變數在工作記憶體中的值是不確定的,需要從主記憶體中讀取;synchronized則是鎖定當前的變數,只有當前執行緒可以訪問到該變數,其他的執行緒將會被阻塞。
  • 2.volatile只能實現變數的修改可見性,並不能保證原子性;而synchronized則可以保證變數的修改可見性和原子性。
  • 3.volatile只能使用在變數級別;synchronized則可以使用在變數、方法、和類級別的。
  • 4.volatile不會造成執行緒的阻塞;synchronized可能會造成執行緒的阻塞。

相關文章