2014-02-28 19 views
0

我需要的是一個類似CoundDownLatch的工具/類,但可以進行上下計數。每當一個任務被執行時,它會計數,當一個任務完成時,它被倒計數。可以有多個任務並行運行,並且一個線程應該等到沒有執行任務/計數器爲0.可以使用什麼API來等待任務完成

我查看了Phaser類,但我不知道它是否提供了我正在查找的內容,也許它可以用來解決這個難題?

+2

此問題似乎無關緊要,因爲您正在申請第三方工具。您可以將線程存儲在數組中,並加入它們以確保它們在退出之前全部完成。您可以使用[Future](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html)獲取結果,或者您可以完全使用其他方法。你在使用什麼樣的設計,以及你卡在哪裏? –

+0

AtomicInteger? –

回答

1

您可以使用java.util.concurrent.locks.Condition以及ReentrantLockAtomicInteger。對任務執行

僞代碼:

// start executing task 
taskCounter.incrementAndGet(); 
// execute task 
... 
// stop executing task 
if (taskCounter.decrementAndGet() == 0) { 
    condition.signal(); 
} 

爲僞服務員線程代碼:

condition.await();