synchronized和volatile的區別簡介說明
阿新 • • 發佈:2022-05-26
轉自:
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標記的變數可以被編譯器優化,裡面的程式碼可被編譯器重排序