天天看點

使用場景:final、volatile、ThreadLocal、synchronized、Atomic(自己整理)

<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頁)