我需要的是一個類似CoundDownLatch的工具/類,但可以進行上下計數。每當一個任務被執行時,它會計數,當一個任務完成時,它被倒計數。可以有多個任務並行運行,並且一個線程應該等到沒有執行任務/計數器爲0.可以使用什麼API來等待任務完成
我查看了Phaser類,但我不知道它是否提供了我正在查找的內容,也許它可以用來解決這個難題?
我需要的是一個類似CoundDownLatch的工具/類,但可以進行上下計數。每當一個任務被執行時,它會計數,當一個任務完成時,它被倒計數。可以有多個任務並行運行,並且一個線程應該等到沒有執行任務/計數器爲0.可以使用什麼API來等待任務完成
我查看了Phaser類,但我不知道它是否提供了我正在查找的內容,也許它可以用來解決這個難題?
您可以使用java.util.concurrent.locks.Condition
以及ReentrantLock
和AtomicInteger
。對任務執行
僞代碼:
// start executing task
taskCounter.incrementAndGet();
// execute task
...
// stop executing task
if (taskCounter.decrementAndGet() == 0) {
condition.signal();
}
爲僞服務員線程代碼:
condition.await();
此問題似乎無關緊要,因爲您正在申請第三方工具。您可以將線程存儲在數組中,並加入它們以確保它們在退出之前全部完成。您可以使用[Future](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html)獲取結果,或者您可以完全使用其他方法。你在使用什麼樣的設計,以及你卡在哪裏? –
AtomicInteger? –