我們在Java 并發(fā) - 并發(fā)理論基礎(chǔ)總結(jié)過線程安全(是指廣義上的共享資源訪問安全性,因為線程隔離是通過副本保證本線程訪問資源安全性,它不保證線程之間還存在共享關(guān)系的狹義上的安全性)的解決思路:
互斥同步: synchronized 和 ReentrantLock
非阻塞同步: CAS, AtomicXXXX
無同步方案: 棧封閉,本地存儲(Thread Local),可重入代碼
ThreadLocal是通過線程隔離的方式防止任務(wù)在共享資源上產(chǎn)生沖突, 線程本地存儲是一種自動化機制,可以為使用相同變量的每個不同線程都創(chuàng)建不同的存儲。
ThreadLocal是一個將在多線程中為每一個線程創(chuàng)建單獨的變量副本的類; 當(dāng)使用ThreadLocal來維護變量時, ThreadLocal會為每個線程創(chuàng)建單獨的變量副本, 避免因多線程操作共享變量而導(dǎo)致的數(shù)據(jù)不一致的情況。