Java併發編程之基礎篇(五)——閉鎖、柵欄、信號量
閉鎖——CountDownLatch
閉鎖類似於一道大門,所有的線程都在大門外等候,當大門打開時,所有線程一起開工。
CountDownLatch提供了一個構造函數,可以傳入一個整數作爲參數,表示初始計數器。每調用一次countDown()方法時,計數器減一,當計數器減到0時,表示大門開放。可以把CountDownLatch想象成賽車的倒計時計數器,當計數器爲0時,所有賽車加速駛出。
下面我們通過開發一個簡單的壓力測試小工具來演示CountDownLatch的使用。
壓力測試小工具
在測試一個系統的處理能力的時候,往往要求測試工具能夠模擬出多個客戶端同一時刻對服務端發起請求的情況,以此來判斷系統的抗壓能力。下面的代碼藉助CountDownLatch實現了該功能,並統計出最後一條請求的完成時間,以此來判斷系統的最大TPS。
public class Task implements Runnable {
//開始計數器
private final CountDownLatch startGate;