### 常用工具類
* Semaphore
* CountDownLatch
* CyclicBarrier
* Exchanger
* Phaser
### 使用場景
這五種同步輔助類適用于的同步場景:
1. Semaphore 信號量是一類經典的同步工具。信號量通常用來限制線程可以同時訪問的(物理或邏輯)資源數量。——公司體檢Semaphore運行多人同時獲得鎖
2. CountDownLatch 一種非常簡單、但很常用的同步輔助類。其作用是在完成一組正在其他線程中執行的操作之前,允許一個或多個線程一直阻塞。——并發獲取系統硬盤大小
3. CyclicBarrier 一種可重置的多路同步點,在某些并發編程場景很有用。它允許一組線程互相等待,直到到達某個公共的屏障點 \(common barrier point\)。在涉及一組固定大小的線程的程序中,這些線程必須不時地互相等待,此時 CyclicBarrier 很有用。因為該 barrier在釋放等待線程后可以重用,所以稱它為循環的barrier。——賽跑
4. Phaser一種可重用的同步屏障,功能上類似于CyclicBarrier和CountDownLatch,但使用上更為靈活。非常適用于在多線程環境下同步協調分階段計算任務(Fork/Join框架中的子任務之間需同步時,優先使用Phaser)
5. Exchanger允許兩個線程在某個匯合點交換對象,在某些管道設計時比較有用。Exchanger提供了一個同步點,在這個同步點,一對線程可以交換數據。每個線程通過exchange\(\)方法的入口提供數據給他的伙伴線程,并接收他的伙伴線程提供的數據并返回。當兩個線程通過Exchanger交換了對象,這個交換對于兩個線程來說都是安全的。Exchanger可以認為是 SynchronousQueue 的雙向形式,在運用到遺傳算法和管道設計的應用中比較有用。
【參考資料】
[https://www.jianshu.com/p/a101ae9797e3](https://www.jianshu.com/p/a101ae9797e3)
- 簡介
- 概述
- 進程vs線程
- 資源限制
- 有關并行的兩個定律
- 線程同步和阻塞
- 線程阻塞
- 線程的特性
- 守護線程
- 線程異常
- Thread
- 線程狀態
- 線程中斷
- wait¬ify
- suspend&resume
- join&yield
- notify¬ifyAll
- Thread.sleep
- 線程任務
- Runnable
- Callable
- Future模式
- FutureTask
- 線程實現方式
- 內核線程實現
- 用戶線程實現
- 混合實現
- Java線程的實現
- java與協程
- 纖程-Fiber
- 線程調度
- 多線程協作方式
- 阻塞
- 放棄
- 休眠
- 連接線程
- 線程估算公式
- 線程活躍性
- 死鎖
- 線程安全性
- 對象的發布與逸出
- 構造方法溢出
- 線程封閉
- 對象的可變性
- 原子性
- 原子操作
- CPU原子操作原理
- 總線鎖
- 緩存鎖
- JAVA如何實現原子操作
- long和double讀寫操作原子性
- Adder和Accumulator
- 線程性能
- 同步工具類
- 閉鎖
- CountDownLatch
- FutureTask
- 信號量
- 柵欄
- CyclicBarrier
- Exchanger
- 并發編程
- volatile
- synchronized
- 無鎖
- 偏向鎖
- 輕量級鎖
- 鎖的優缺點對比
- 鎖升級
- 鎖消除
- Monitor
- synchronized語法
- Mutex Lock
- synchronized實踐問題
- synchronized&ReentrantLock
- Lock
- ReentrantLock
- Condition
- 讀寫鎖
- ReadWriteLock
- StampedLock
- 線程池
- Executor
- ExecutorService
- Executors
- ThreadPoolExecutor
- RejectedExecutionHandler
- ThreadFactory
- 線程池大小公式
- 動態調整線程池大小
- Fork/Join框架
- ForkJoinPool
- CompletableFuture
- JUC并發工具包
- LockSupport
- 延時任務與周期任務
- Timer
- TimerTask
- 異構任務并行化
- CompletionService
- volatile和synchronized比較
- 鎖優化
- 鎖相關概念
- 悲觀鎖(排它鎖)
- 樂觀鎖
- 自旋鎖
- 樂觀鎖vs悲觀鎖
- JVM鎖優化-鎖消除
- ThreadLocal
- InheritableThreadLocal
- TransmittableThreadLocal
- ThreadLocalRandom
- 無鎖
- AtomicInteger
- Unsafe
- AtomicReference
- AtomicStampedReference
- AtomicIntegerArray
- AtomicIntegerFieldUpdater
- 無鎖Vector
- LongAdder
- LongAccumulator
- 常見鎖類型
- 悲觀鎖&獨占鎖
- 樂觀鎖
- 樂觀鎖vs悲觀鎖
- 自旋鎖vs適應性自旋鎖
- 公平鎖vs非公平鎖
- 可重入鎖vs非可重入鎖
- 獨享鎖vs共享鎖
- 互斥鎖
- CAS
- AQS介紹
- AQS深入剖析
- AQS框架
- AQS核心思想
- AQS數據結構
- 同步狀態State
- ReentrantLock vs AQS
- AQS與ReentrantLock的關聯
- ReentrantLock具體實現
- 線程加入等待隊列
- 等待隊列中線程出隊列時機
- 如何解鎖
- 中斷恢復后的執行流程
- ReentrantLock的可重入應用
- JUC中的應用場景
- 自定義同步工具
- CLH鎖
- 并發框架
- Akka
- Disruptor-無鎖緩存框架
- 常見面試題
- 兩個線程交替打印A和B
- 附錄