線程之間的通信機制有兩種:共享內存和消息傳遞。
Java線程之間的通信由Java內存模型(JMM)控制,JMM控制一個線程對共享變量的寫入什麼時候對另一個線程可見。下圖是JMM的抽象結構:
線程之間的共享變量存儲在主內存中(Main Memory),每一個線程都有自己的本地內存(Local Memory),本地內存中存儲着讀/寫共享變量的副本。
由上圖可以看出,線程之間的通信由兩個步驟:
線程A把修改後的本地內存中的共享變量更新到主內存中去
線程B到主內存中讀取線程A之前更新過的共享變量
從整體上看,這就是線程A在向線程B發送消息,而且這個消息必須經過主內存。JMM通過控制主內存與每個線程的本地內存之間的交互,來爲Java程序員提供內存可見性保證。