七 併發工具類之CountDownLatch

2021-08-25 14:42:52 字數 1071 閱讀 5612

乙個執行緒需要等到其他執行緒進行某操作時,可以使用countdownlatch。 countdownlatch構造方法,帶有乙個int型別的引數。

public countdownlatch(int count)
當乙個執行緒呼叫countdownlatch.await()時,執行緒會等待。直到其他執行緒執行 countdownlatch.countdown()。每執行乙個countdown方法,初始化的count會減一,直到count=0時,等待執行緒才被喚醒。

假設場景顧客餐廳吃飯,需要等待做飯,炒菜,上湯都完成了,才開始吃飯。 **:

//顧客執行緒

public class customer implements runnable

public void run() catch (interruptedexception e)

}public static void main(string args) throws interruptedexception finally

}}.start();

new thread()finally

}}.start();

new thread()finally

}}.start();

customer.join();

}

輸出:

點完菜,等待開吃

做飯炒菜

上湯開飯了。。。。。。。。

結果正確,等待做飯,炒菜,上湯都完成了,才開始吃飯。

總結:countdownlatch內部通過共享鎖實現

countdown方法最好放在finally**塊中執行,防止執行緒永遠等待

countdownlatch再 count減到0之後,再次執行countdown不會有影響,count不變。

await方法有過載方法public boolean await(long timeout, timeunit unit),等待一段時間後恢復。

countdownlatch只能使用一次,count=0時,不能回滾再次使用。

併發工具類之 CyclicBarrier

cyclicbarrier 字面意思是可迴圈 cyclic 的屏障 barrier 它要做的事情是讓一組執行緒到達屏障時被阻塞,直到最後乙個執行緒也到達屏障,屏障才會開門,所有被屏障攔截的執行緒才會繼續執行。cyclicbarrier 有兩個構造方法,我們先來看第乙個 cyclicbarrier i...

併發工具類之 Exchanger

exchanger 交換者 是乙個用於執行緒間協作的工具類。exchanger 用於進行執行緒間的資料交換。兩個執行緒通過exchange 方法交換資料,第乙個執行緒執行到exchange 方法後會一直等待第二個執行緒也執行exchange 方法,當兩個執行緒都到達同步點後,這兩個執行緒就可以交換資...

Java併發工具類之CyclicBarrier

cyclicbarrier的意思是可迴圈使用的屏障。它可以讓一組執行緒到達乙個屏障時被阻塞,直到最後乙個執行緒到達屏障時,屏障才會開門,所有阻塞的執行緒才會繼續執行。它就好像一道關卡,只有所有的部隊 執行緒 都到了才能放行。部分原始碼 public class cyclicbarrier 可以看到,...