注:本系列博客主要參考於《分布式Java應用:基礎與實踐》,林昊 著
1、常用的並發集合類
- ConcurrentHashMap:線程安全的HashMap的實現
- CopyOnWriteArrayList:線程安全且在讀操作時無鎖的ArrayList
- CopyOnWriteArraySet:基於CopyOnWriteArrayList,不添加重復元素
- ArrayBlockingQueue:基於數組、先進先出、線程安全,可實現指定時間的阻塞讀寫,並且容量可以限制
- LinkedBlockingQueue:基於鏈表實現,讀寫各用一把鎖,在高並發讀寫操作都多的情況下,性能優於ArrayBlockingQueue
2、原子類
- AtomicInteger:線程安全的Integer,基於CAS(無阻塞,CPU原語),優於使用同步鎖的Integer
3、線程池
- ThreadPoolExecutor:一個高效的支持並發的線程池,可以很容易的講一個實現了Runnable接口的任務放入線程池執行,但要用好這個線程池,必須合理配置corePoolSize、最大線程數、任務緩沖隊列,以及隊列滿了+線程池滿時的回絕策略,一般而言對於這些參數的配置,需考慮兩類需求:高性能和緩沖執行。
- Executor:提供了一些方便的創建ThreadPoolExecutor的方法。
- FutureTask:可用於異步獲取執行結果或取消執行任務的場景,基於CAS,避免鎖的使用
4、鎖
- ReentrantLock:與synchronized效果一致,但是又更加靈活,支持公平/非公平鎖、支持可中斷的鎖、支持非阻塞的tryLock(可超時)、支持鎖條件等,需要手工釋放鎖,基於AbstractQueueSynchronizer
- ReentrantReadWriteLock:與ReentrantLock沒有關系,采用兩把鎖,用於讀多寫少的情形
注:在本系列的博客中,對以上的類會着重從以下幾個方面去記錄:
- 用法
- 源碼解讀
- 使用場景
- 一些必要的比較