<col>
鎖
原理
使用場景
final
實作了Java記憶體模型的可見性
一個變量要被多個線程通路
volatile
實作了Java記憶體模型的可見性、有序性
ThreadLocal
如果一個變量要被某個線程獨享,Java中就沒有類似C++中__declspec(thread)這樣的關鍵字,不過還是可以通過java.lang.ThreadLocal類來實作線程本地存儲的功能。每一個線程的Thread對象中都有一個ThreadLocalMap對象,這個對象存儲了一組以ThreadLocal.threadLocalHashCode為鍵,以本地線程變量為值的K-V值對,ThreadLocal對象就是目前線程的ThreadLocalMap的通路入口,每一個ThreadLocal對象都包含了一個獨一無二的threadLocalHashCode值,使用這個值就可以線上程K-V值對中找回對應的本地線程變量。
一個變量要被某個線程獨享
synchronized
實作了Java記憶體模型的原子性、可見性、有序性
Atomic
CAS(《深入了解Java虛拟機(第2版)》第572頁)