通過synchronized
關鍵字給方法加上內建鎖來實現執行緒安全
timer
,timertask
,vector
,stack
,hashtable
,stringbuffer
原子類atomic***
—包裝類的執行緒安全類
如atomiclong
,atomicinteger
等等
atomic***
是通過unsafe
類的native方法實現執行緒安全的
blockingqueue
和blockingdeque
blockingdeque
介面繼承了blockingqueue
介面,
blockingqueue
介面的實現類有arrayblockingqueue
,linkedblockingqueue
,priorityblockingqueue
而blockingdeque
介面的實現類有linkedblockingdeque
blockingqueue
和blockingdeque
都是通過使用定義為final的reentrantlock
作為類屬性顯式加鎖實現同步的
copyonwritearraylist
和copyonwritearrayset
copyonwritearrayset
的內部實現是在其類內部宣告乙個final的copyonwritearraylist
屬性,並在呼叫其建構函式時例項化該copyonwritearraylist
,copyonwritearraylist
採用的是顯式地加上reentrantlock
實現同步,而copyonwritearraylist
容器的執行緒安全性在於在每次修改時都會建立並重新發布乙個新的容器副本,從而實現可變性。
concurrent***
最常用的就是concurrenthashmap
,當然還有concurrentskiplistset
和concurrentskiplistmap
等等。
concurrenthashmap
使用了一種完全不同的加鎖策略來提供更高的併發性和伸縮性。concurrenthashmap
並不是將每個方法都在同乙個鎖上同步並使得每次只能有乙個執行緒訪問容器,而是使用一種粒度更細的加鎖機制——分段鎖
來實現更大程度的共享
在這種機制中,任意數量的讀取執行緒可以併發訪問map,執行讀取操作的執行緒和執行寫入操作的執行緒可以併發地訪問map,並且一定數量的寫入執行緒可以併發地修改map,這使得在併發環境下吞吐量更高,而在單執行緒環境中只損失非常小的效能
threadpoolexecutor
threadpoolexecutor
也是使用了reentrantlock
顯式加鎖同步
collections
中的synchronizedcollection(collection c)
方法可將乙個集合變為執行緒安全,其內部通過synchronized
關鍵字加鎖同步
一、概念:
二、執行緒安全(thread-safe)的集合物件:
三、非執行緒安全的集合物件:
vector和arraylist在使用上非常相似,都可以用來表示一組數量可變的物件應用的集合,並且可以隨機的訪問其中的元素。
1、在執行速度方面的比較:stringbuilder > stringbuffer ;
2、他們都是字串變數,是可改變的物件,每當我們用它們對字串做操作時,實際上是在乙個物件上操作的,不像string一樣建立一些物件進行操作,所以速度快;
3、 stringbuilder:執行緒非安全的;
4、stringbuffer:執行緒安全的;
對於string、stringbuffer和stringbulider三者使用的總結:
1.如果要操作少量的資料用 = string
2.單執行緒操作字串緩衝區 下操作大量資料 = stringbuilder
3.多執行緒操作字串緩衝區 下操作大量資料 = stringbuffer
Java常見的執行緒安全的類
原子類atomic 包裝類的執行緒安全類 如atomiclong,atomicinteger等等 atomic 是通過unsafe類的native方法實現執行緒安全的 blockingqueue和blockingdeque blockingdeque介面繼承了blockingqueue介面,bloc...
java 多執行緒 以前的執行緒安全的類回顧
a 回顧以前說過的執行緒安全問題 看原始碼 vector,stringbuffer,hashtable,collections.synchroinzed vector是執行緒安全的,arraylist是執行緒不安全的 stringbuffer是執行緒安全的,stringbuilder是執行緒不安全的...
執行緒安全(常用的執行緒安全類)
string中的stringbuffer list集合中的vector copyonwritearraylist reentrantlock lock鎖 是執行緒安全的arraylist vector是增刪改查方法都加了synchronized,保證同步,但是每個方法執行的時候都要去獲得鎖,效能就會...