1、JMM Java Memory Model (java內存模型)
併發過程中如何處理可見性、原子性、有序性的問題
使用多線程Runnable/ Thread
併發編程中的兩個關鍵問題
-
線程之間如何通信:
wait()
notify()
notifyall()a,共享內存 – 隱式通信
b,消息傳遞 – 顯式通信 -
線程之間如何同步
在共享內存的併發模型中,同步是顯式做的;synchronized
在消息傳遞的併發模型中,由於消息的發送必須在消息的接收之前,所以同步是隱式
區別
a) 對於聲明瞭Volatile的變量進行寫操作的時候,JVM會向處理器發送一條Lock前綴的指令,會把這個變量所在緩存行的數據寫回到系統內存。
b) 在多處理器的情況下,保證各個處理器緩存一致性的特點,就會實現緩存一致性協議。
Synchronized:可重入鎖、互斥性、可見性。
Volatile 可以做到原子性、可見性;不能做到複合操作的原子性。