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
- 對CAS演算法的簡單理解演算法
- 基於CAS操作的非阻塞演算法演算法
- C#中使用CAS實現無鎖演算法C#演算法
- ThreadLocal和ThreadLocalMap原始碼分析thread原始碼
- 淺談synchronized、Lock、ThreadLocal和semaphoresynchronizedthread
- final域、Atomic和ThreadLocalthread
- Java中ThreadLocal的用法和原理Javathread
- ThreadLocal原始碼和圖文分析thread原始碼
- ThreadLocal 原理和使用場景分析thread
- 談談引用和Threadlocal的那些事thread
- CAS原理
- 理解CAS
- CAS操作
- ThreadLocalthread
- CAS (3) —— Mac下配置CAS客戶端經代理訪問Tomcat CASMac客戶端Tomcat
- 硬體對同步的支援-TAS和CAS指令
- 面試中的 ThreadLocal 原理和使用場景面試thread
- 基礎篇:JAVA引用型別和ThreadLocalJava型別thread
- 使用ThreadLocal變數的時機和方法thread變數
- Threadlocal詳解(ThreadLocal,InheritTableThreadLocal,TransmittableThreadLocal)threadMIT
- 非阻塞佇列ConcurrentLinkedQueue與CAS演算法應用分析佇列演算法
- CAS 原子操作
- ThreadLocal分析thread
- ThreadLocal解析thread
- ThreadLocal理解thread
- 解析ThreadLocalthread
- ThreadLocal 剖析thread
- ThreadLocal 解析thread
- 理解ThreadLocalthread
- CAS跨域SSO例項安裝和配置指南跨域
- CAS (4) —— CAS瀏覽器SSO訪問順序圖詳解(CAS Web Flow Diagram by Example)瀏覽器Web
- CAS學習筆記二:CAS單點登入流程筆記
- CAS (1) —— Mac下配置CAS到Tomcat(服務端)MacTomcat服務端