1. 程式人生 > 其它 >synchronized和volatile的區別簡介說明

synchronized和volatile的區別簡介說明

轉自:

   http://www.java265.com/JavaMianJing/202204/16506883463047.html

下文筆者講述synchronized和volatile的不同之處,如下所示:

synchronized和volatile的區別:
     1.對jvm的用途
	    volatile告訴jvm當前變數在暫存器(工作記憶體)中的值是不確定的,需要從主存中讀取
        synchronized則是鎖定當前變數,只有當前執行緒可以訪問該變數,其他執行緒被阻塞住
	 2.可修改物件不同
	    volatile只能修飾變數
		synchronized可修飾變數、方法、和類
	 3.功能
        volatile能實現變數的修改可見性,不能保證原子性
        synchronized則可以保證變數的修改可見性和原子性
	 4.是否造成阻塞
        volatile不會造成執行緒的阻塞
        synchronized可能會造成執行緒的阻塞
     5.jvm是否優化
        volatile標記的變數不會被編譯器優化也不會被重排序
        synchronized標記的變數可以被編譯器優化,裡面的程式碼可被編譯器重排序