我有一個班級商店。在 main 中,我在 main 中創建了 3 個商店物件
Thread thread1 = new Thread(shop1);
Thread thread2 = new Thread(shop2);
Thread thread3 = new Thread(shop3);
threads.add(thread1);
threads.add(thread2);
threads.add(thread3);
for (Thread t : threads) {
t.start();
}
shop類中的run方法
@Override
public void run() {
for(int day=0;day<=360; day) {
if (day% 30 == 0) {
delivery();
}
CODE...
}
}
我希望執行緒每 30 天同步一次。所以每 30 天執行緒都在等待對方。
使用 Thread.join() 是最簡單的,但是當我在 run() 中時如何使用它。
我也在考慮做而不是360天,12次30天
public void run() {
for(int day=0;day<30; day) {
if (day% 30 == 0) {
delivery();
}
CODE...
并在 main join() 中使用,但是如何重新啟動該方法存在問題。
我能做些什么來同步這個?
uj5u.com熱心網友回復:
你應該熟悉CyclicBarrier類。
一種同步輔助工具,它允許一組執行緒全部等待彼此到達公共屏障點。CyclicBarriers 在涉及固定大小的執行緒組的程式中很有用,這些執行緒必須偶爾相互等待。屏障被稱為回圈的,因為它可以在等待執行緒被釋放后重新使用。
請注意,您可以選擇定義一個 barrierAction,它由到達屏障的最后一個執行緒執行。
請參閱Java 中的教程CyclicBarrier
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399890.html
下一篇:在回圈內運行函式而不停止
