同期プッシュ/ポップの要素であるConcurrentLinkedDequeを取得しました。 とI'vはスタックから1つの要素を取ります要素には隣人があります。スタックにプッシュしています。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ループ内に追加の文がしたい - 「キュータのいずれかのタスクが動作しています?」
:
は、ここでのコード例です!私はあなたのソリューションを使用して、それは良い作品です、ありがとう! :) – user4129715
ここでallDoneの目的は何でしょうか?future.isDoneはtrueかfalseを返しますか?ところで、偉大な答え! – User3
@ User3 'allDone'の目的は、('&= '演算子を使って)未来の_all_が完了したかどうかを示す単一のブール値を取得することです。 'future.isDone()'は個々の未来が完了したかどうかを調べるためだけに使うことができます –