ExecutorServiceスレッドのフロー規則に基づいて質問があります。 executonに複数のスレッドを追加したい場合は、スレッドが終了するまで待つことをお勧めします。実行中。。ExecutorService:スレッドフロー規則の改善
これまでのところ、私はCountDownLatch()を使ってこれを行う方法を知っています。 1は、(.await後に追加のスレッドを追加することはできません、
public class Example{
public static void main(String[] args) throws InterruptedException {
CountDownLatch cdl = new CountDownLatch(2); //count of 2
ExecutorService executor = Executors.newCachedThreadPool();
executor.submit(new Runnable() {
public void run() {
method1(); //simulation of a useful method 1
cdl.countDown(); //reduces the count by one
}
});
executor.submit(new Runnable() {
public void run() {
method2(); //simulation of a useful method 2
cdl.countDown();
}
});
cdl.await(); //will wait until both methods are complete
executor.submit(new Runnable() {
public void run() {
result(); //simulation of a method that needs previous threads to execute }
});
}
}
非常に明白、このような方法は、このような作業のために最適ではない一つのことのために、次の例では3分の1が開始する前に完了する必要があり2つのスレッドを示しています)は、CDL自体に依存しません。
したがって、CDLと比較してスレッド実行をよりうまく操作できるように、ExecutorServiceでスレッドフローを調整する方が良いでしょうか。
ありがとうございました!それでもCDLやFutureメソッドが優れているかどうかはまだ分かっていますが、少なくとも私は今行くべきことがあります。そして、もし誰かがこの質問に対する答えを知っていたら、それをコミットしてください! –
関連するSEの質問を見てください:https://stackoverflow.com/questions/3269445/executorservice-how-to-wait-for-all-tasks-to-finish/ –