Java中volatile和synchronized的區別
volatile和synchronized的區別:
1.volatile本質是在告訴jvm當前變數在暫存器(工作記憶體)中的值是不確定的,需要從主存中讀取;synchronized則是鎖定當前變數,只有當前執行緒可以訪問該變數,其他執行緒被阻塞住。
2.volatile僅能使用在變數級別;synchronized則可以使用在變數、方法、和類級別的
3.volatile僅能實現變數的修改可見性,並能保證原子性;而synchronized則可以保證變數的修改可見性和原子性
4.volatile不會造成執行緒的阻塞;synchronized可能會造成執行緒的阻塞。
5.volatile標記的變數不會被編譯器優化;synchronized標記的變數可以被編譯器優化
相關文章
- synchronized和volatile的區別synchronized
- volatile和synchronized的區別synchronized
- volatile與synchronized的區別synchronized
- volatile和synchronized的區別與聯絡[轉]synchronized
- Java中的volatile的作用和synchronized作用Javasynchronized
- Volatile關鍵字&&DCL單例模式,volatile 和 synchronized 的區別單例模式synchronized
- JAVA 裡static 和volatile的區別Java
- Lock 和 synchronized的區別synchronized
- synchronized和volatile理解synchronized
- volatile和synchronized到底啥區別?多圖文講解告訴你synchronized
- Java synchronized與ReentrantLock的區別JavasynchronizedReentrantLock
- java 中equals和==的區別Java
- Java中equals和==的區別Java
- java中的==和equal的區別Java
- java中==和equlas區別Java
- Java中Vector和ArrayList的區別Java
- Java中 equals() 方法和 == 的區別Java
- 對於java中的"\"和"/" 區別Java
- 在java中“equals”和“==”的區別Java
- Java中throw和throws的區別Java
- Java中堆和棧的區別Java
- synchronized與Lock的區別synchronized
- 理解並正確使用synchronized和volatilesynchronized
- java中的synchronizedJavasynchronized
- Java併發2:JMM,volatile,synchronized,finalJavasynchronized
- synchronized函式和synchronized程式碼塊有什麼區別?synchronized函式
- 全面解讀volatile和synchronize,輕鬆掌握Volatile與Synchronizedsynchronized
- JAVA 中interface 和 abstract 區別Java
- java中size()和length區別Java
- Java中Runnable和Thread的區別Javathread
- Java 中Thread 和Runnable的區別Javathread
- 多執行緒的指令重排問題:as-if-serial語義,happens-before語義;volatile關鍵字,volatile和synchronized的區別執行緒APPsynchronized
- synchronized與ReentrantLock的區別synchronizedReentrantLock
- Synchronized 與 ReentrantLock 的區別synchronizedReentrantLock
- Java虛擬機器13:互斥同步、鎖優化及synchronized和volatileJava虛擬機優化synchronized
- Java中ArrayList和LinkedList區別Java
- JAVA中Get和Post請求的區別Java
- java中list、set和map 的區別(轉)Java