10
我已經獲得了用於同步推送/彈出元素的ConcurrentLinkedDeque, 和我有一些異步任務從堆棧中獲取一個元素,如果此操作元素有鄰居它推動它堆疊。如何檢查在ExecutorService上運行的所有任務是否完成
示例代碼:
private ConcurrentLinkedDeque<Item> stack = new ConcurrentLinkedDeque<>();
private ExecutorService exec = Executors.newFixedThreadPool(5);
while ((item = stack.pollFirst()) != null) {
if (item == null) {
} else {
Runnable worker = new Solider(this, item);
exec.execute(worker);
}
}
class Solider{
public void run(){
if(item.hasNeighbors){
for(Item item:item.neighbors){
stack.push(item)
}
}
}
}
我想有while循環,回答了問題補充發言 - 「在遺囑執行人有關的任務是工作?」
我想已經有一個在Java方法用於此:< 反正!我用過你的解決方案,效果很好,謝謝! :) – user4129715
在這裏,allDone的目的是什麼,不能預測future.isDone會自己返回真或假?順便說一句 - 偉大的答案! – User3
@ User3'allDone'的目的是得到一個單一的布爾值,指示期貨的_all_是否完成(通過使用&&操作符)。 'future.isDone()'只能用於檢查單個Future是否完整 –