Java常見的執行緒安全的類

2021-08-20 18:02:16 字數 1694 閱讀 5421

原子類atomic***—包裝類的執行緒安全類 

atomiclongatomicinteger等等

atomic***是通過unsafe類的native方法實現執行緒安全的

blockingqueueblockingdeque

blockingdeque介面繼承了blockingqueue介面, 

blockingqueue介面的實現類有arrayblockingqueuelinkedblockingqueuepriorityblockingqueueblockingdeque介面的實現類有linkedblockingdeque

blockingqueueblockingdeque都是通過使用定義為final的reentrantlock作為類屬性顯式加鎖實現同步的

copyonwritearraylistcopyonwritearrayset

copyonwritearrayset的內部實現是在其類內部宣告乙個final的copyonwritearraylist屬性,並在呼叫其建構函式時例項化該copyonwritearraylistcopyonwritearraylist採用的是顯式地加上reentrantlock實現同步,而copyonwritearraylist容器的執行緒安全性在於在每次修改時都會建立並重新發布乙個新的容器副本,從而實現可變性。

concurrent***

最常用的就是concurrenthashmap,當然還有concurrentskiplistsetconcurrentskiplistmap等等。 

concurrenthashmap使用了一種完全不同的加鎖策略來提供更高的併發性和伸縮性。concurrenthashmap並不是將每個方法都在同乙個鎖上同步並使得每次只能有乙個執行緒訪問容器,而是使用一種粒度更細的加鎖機制——分段鎖來實現更大程度的共享

在這種機制中,任意數量的讀取執行緒可以併發訪問map,執行讀取操作的執行緒和執行寫入操作的執行緒可以併發地訪問map,並且一定數量的寫入執行緒可以併發地修改map,這使得在併發環境下吞吐量更高,而在單執行緒環境中只損失非常小的效能

threadpoolexecutor

threadpoolexecutor也是使用了reentrantlock顯式加鎖同步

collections中的synchronizedcollection(collection c)方法可將乙個集合變為執行緒安全,其內部通過synchronized關鍵字加鎖同步    

Java常見的執行緒安全的類

通過synchronized關鍵字給方法加上內建鎖來實現執行緒安全 timer,timertask,vector,stack,hashtable,stringbuffer 原子類atomic 包裝類的執行緒安全類 如atomiclong,atomicinteger等等 atomic 是通過unsaf...

java 多執行緒 以前的執行緒安全的類回顧

a 回顧以前說過的執行緒安全問題 看原始碼 vector,stringbuffer,hashtable,collections.synchroinzed vector是執行緒安全的,arraylist是執行緒不安全的 stringbuffer是執行緒安全的,stringbuilder是執行緒不安全的...

執行緒安全(常用的執行緒安全類)

string中的stringbuffer list集合中的vector copyonwritearraylist reentrantlock lock鎖 是執行緒安全的arraylist vector是增刪改查方法都加了synchronized,保證同步,但是每個方法執行的時候都要去獲得鎖,效能就會...