java中的Volatile和synchronized的區別

1、JMM Java Memory Model (java內存模型)
併發過程中如何處理可見性、原子性、有序性的問題
使用多線程Runnable/ Thread

併發編程中的兩個關鍵問題

  1. 線程之間如何通信:
    wait()
    notify()
    notifyall()

    a,共享內存 – 隱式通信
    在這裏插入圖片描述
    b,消息傳遞 – 顯式通信

  2. 線程之間如何同步
    在共享內存的併發模型中,同步是顯式做的;synchronized
    在消息傳遞的併發模型中,由於消息的發送必須在消息的接收之前,所以同步是隱式

區別

a) 對於聲明瞭Volatile的變量進行寫操作的時候,JVM會向處理器發送一條Lock前綴的指令,會把這個變量所在緩存行的數據寫回到系統內存。

b) 在多處理器的情況下,保證各個處理器緩存一致性的特點,就會實現緩存一致性協議。

Synchronized:可重入鎖、互斥性、可見性。

Volatile 可以做到原子性、可見性;不能做到複合操作的原子性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章