1. 程式人生 > >Java中Volatile和Synchronized的區別

Java中Volatile和Synchronized的區別

個人部落格:小景哥哥

Java中Volatile和Synchronized的區別

JMM Java Memory Model. 併發過程中如何處理可見性、原子性、有序性的問題

Runnable、Thread

併發程式設計中的兩個關鍵問題

a.執行緒之間如何通訊 wait() notify() notifyall()

a) 共享記憶體 – 隱式通訊

b)訊息傳遞 – 顯式通訊

b.執行緒之間如何同步

在共享記憶體的併發模型中,同步是顯示做的;synchronized

在訊息傳遞的併發模型中,由於訊息的傳送必須在訊息接收之前,所以同步是隱式的

對於聲明瞭volatile的變數進行寫操作的時候,JVM會向處理器傳送一條Lock字首的指令,會把這個變數所在快取行的資料寫回到系統記憶體。

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

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

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