1、通過synchronized 關鍵字給方法加上內置鎖來實現線程安全
Timer,TimerTask,Vector,Stack,HashTable,StringBuffer。
2、原子類Atomicxxx—包裝類的線程安全類
如AtomicLong,AtomicInteger等等。
Atomicxxx 是通過Unsafe 類的native方法實現線程安全的。
3、BlockingQueue 和BlockingDeque
BlockingDeque接口繼承了BlockingQueue接口,BlockingQueue 接口的實現類有ArrayBlockingQueue ,LinkedBlockingQueue ,PriorityBlockingQueue 而BlockingDeque接口的實現類有LinkedBlockingDeque。
BlockingQueue和BlockingDeque 都是通過使用定義為final的ReentrantLock作為類屬性顯式加鎖實現同步的。
4、CopyOnWriteArrayList和 CopyOnWriteArraySet
CopyOnWriteArraySet的內部實現是在其類內部聲明一個final的CopyOnWriteArrayList屬性,并在調用其構造函數時實例化該CopyOnWriteArrayList,CopyOnWriteArrayList采用的是顯式地加上ReentrantLock實現同步,而CopyOnWriteArrayList容器的線程安全性在于在每次修改時都會創建并重新發布一個新的容器副本,從而實現可變性。
5、Concurrentxxx
最常用的就是ConcurrentHashMap,當然還有ConcurrentSkipListSet和ConcurrentSkipListMap等等。
ConcurrentHashMap使用了一種完全不同的加鎖策略來提供更高的并發性和伸縮性。ConcurrentHashMap并不是將每個方法都在同一個鎖上同步并使得每次只能有一個線程訪問容器,而是使用一種粒度更細的加鎖機制——分段鎖來實現更大程度的共享。
在這種機制中,任意數量的讀取線程可以并發訪問Map,執行讀取操作的線程和執行寫入操作的線程可以并發地訪問Map,并且一定數量的寫入線程可以并發地修改Map,這使得在并發環境下吞吐量更高,而在單線程環境中只損失非常小的性能。
6、ThreadPoolExecutor
ThreadPoolExecutor也是使用了ReentrantLock顯式加鎖同步。
7、Collections中的synchronizedCollection(Collection c)方法可將一個集合變為線程安全,其內部通過synchronized關鍵字加鎖同步。