CAS演算法和ThreadLocal
CAS操作是一種樂觀鎖技術,是指在運算元據之前先判斷資料是否修改過(通過預期值與記憶體值比較是否相等來判斷),只有當資料沒被修改過的時候,才寫入資料;注意CAS操作存在ABA問題,即A被修改為B又被修改為A,導致無法判斷A是否變化過,解決該問題可以通過引入版本號等手段
ThreadLocal類及應用技巧
JDK1.5提供了ThreadLocal類來方便實現執行緒範圍內的資料共享。
每個執行緒呼叫全域性ThreadLocal物件的set方法,就相當於往其內部的map集合中增加一條記錄,key就是各自的執行緒,value就是各自的set方法傳進去的值。
線上程結束時可以呼叫ThreadLocal.clear()方法用來更快釋放記憶體,也可以不呼叫,因為執行緒結束後也可以自動釋放相關的ThreadLocal變數。
一個ThreadLocal物件只能記錄一個執行緒內部的一個共享變數,需要記錄多個共享資料,可以建立多個ThreadLocal物件,或者將這些資料進行封裝,將封裝後的資料物件存入ThreadLocal物件中。
將資料物件封裝成單例,同時提供執行緒範圍內的共享資料的設定和獲取方法,提供已經封裝好了的執行緒範圍內的物件例項,使用時只需獲取例項物件即可實現資料的執行緒範圍內的共享,因為該物件已經是當前執行緒範圍內的物件了
防止多執行緒訪問共享資源產生異常結果的另外一種方式是消除資源的共享,可以使用執行緒本地儲存ThreadLocal達到這樣的效果,即為每個執行緒建立一個共享資源的儲存,從而消除多個執行緒對該資源的共享訪問;
可以通過get和set方法訪問該物件的內容,每個執行緒對value的訪問相互獨立,互不干擾,因為它們訪問的本來就不是同一個資源
相關文章
- CAS 演算法 —— Compare and Swap演算法
- cas無鎖化演算法演算法
- CAS 演算法與 Java 原子類演算法Java
- 聊聊併發(六)——CAS演算法演算法
- 併發程式設計基礎(二)—— ThreadLocal及CAS基本原理剖析程式設計thread
- final域、Atomic和ThreadLocalthread
- 對CAS演算法的簡單理解演算法
- ThreadLocal和ThreadLocalMap原始碼分析thread原始碼
- 淺談synchronized、Lock、ThreadLocal和semaphoresynchronizedthread
- ThreadLocal原始碼和圖文分析thread原始碼
- ThreadLocal 原理和使用場景分析thread
- Java中ThreadLocal的用法和原理Javathread
- C#中使用CAS實現無鎖演算法C#演算法
- 談談引用和Threadlocal的那些事thread
- Threadlocal詳解(ThreadLocal,InheritTableThreadLocal,TransmittableThreadLocal)threadMIT
- CAS
- ThreadLocalthread
- 非阻塞佇列ConcurrentLinkedQueue與CAS演算法應用分析佇列演算法
- 基礎篇:JAVA引用型別和ThreadLocalJava型別thread
- CAS原理
- CAS操作
- 理解CAS
- ThreadLocal理解thread
- ThreadLocal解析thread
- ThreadLocal 剖析thread
- ThreadLocal分析thread
- 解析ThreadLocalthread
- ThreadLocal 解析thread
- 硬體對同步的支援-TAS和CAS指令
- 面試中的 ThreadLocal 原理和使用場景面試thread
- CAS 原子操作
- BAT面試必考:ThreadLocal ,ThreadLocalMap 和Thread 的關係BAT面試thread
- 基於AOP和ThreadLocal實現日誌記錄thread
- 揭祕ThreadLocalthread
- ThreadLocal的使用thread
- ThreadLocal原理分析thread
- Java ThreadLocal解析Javathread
- ThreadLocal原始碼thread原始碼