1. 程式人生 > >Java中的並發工具類

Java中的並發工具類

down ont not 調用 遺傳 數據庫連接 所有 線程 latch

1、等待多線程完成的CountDownLatch

CountDownLatch允許一個或多個線程等待其他線程完成操作。join用於讓當前執行線程等待join線程執行結束。其實現原理是不停檢查join線程是否存活,如果join線程存活則讓當前線程永遠等待。直到join線程中止後,線程的this.notifyAll()方法會被調用,調用notifyAll()方法是在JVM裏實現的。

2、同步屏障CyclicBarrier

CylicBarrier的字面意思是可循環使用(Cyclic)的屏障(Barrier)。它讓一組線程到達一個屏障(也可以叫同步點)時被阻塞,直到最後一個線程到達屏障時,屏障才會開門,所有被屏障攔截的線程才會繼續運行。

CountDownLatch的計數器只能使用一次,而CyclicBarrier的計數器可以使用rest()方法重置。所以CyclicBarrier能處理更為復雜的業務場景。

3、控制並發線程數的Semaphore

Semaphore(信號量)是用來控制同時訪問特定資源的線程數量,它通過協調各個線程,以保證合理的使用公共資源。

Semaphore可以用於流量控制,特別是公用資源有限的應用場景,比如數據庫連接。

Semaphore的用法:首先線程使用Semaphore的acquire()方法獲取一個許可證,使用完之後調用release()方法歸還許可證。還可以用tryAcquire()方法嘗試獲取許可證。

4、線程間交換數據的Exchanger

Exchanger(交換者)是一個用於線程間協作的工具類。Exchanger提供一個同步點,在這個同步點,兩個線程可以交換彼此的數據。分別調用exchange()方法。

Exchanger可以用於遺傳算法,校對工作。

Java中的並發工具類