0

{Loop-1}スレッドを開始する loop を取得しました。{Loop-1}実装された Daemon と Runnableを含むクラス。開始され{Loop-1}たスレッドでは、ExecutorService を使用するcoordinate()クラスのメソッドを呼び出します。Coordinate.java

のオブジェクトCoordinate.javaが作成されると (これは BEFORE で 1 回発生し{Loop-1}ます)、ExecutorService をインスタンス化します。 pool = Executors.newFixedThreadPool(2);

Callable を実装するクラスの 2 つのオブジェクトを作成し、coordinate()それらを開始して、結果を Future の結果のリストに格納します。 callableResults = pool.invokeAll(threads);

その後、ループで結果を取得しようとしますresult = future.get();

その後、 に戻り、{Loop-1}プロセス全体が再び開始されます (call coordinate()invokeAll()future.get()

ここで、次の質問があります: 1. で結果を取得した後、ExecutorService のプールをシャットダウンする必要がありますcoordinate()か? 2.{Loop-1}呼び出しのたびにプールを再作成する必要がありますcoordinate()か?

答えてくれてありがとう!:-)

4

2 に答える 2

2

いいえ、しません。固定スレッドプール内のスレッドは、呼び出すまで使用できますshutdown。したがって、最初のラウンドで行ったのとまったく同じように、実行する新しいタスクを再送信してその結果をフェッチするだけです。

于 2012-03-05T12:58:50.937 に答える
1

すべてのタスクの処理が完了したら、executorServiceをシャットダウンする必要があります。タスクの送信は複数のサイクルで行うことができます。

を呼び出すとexecutorService.shutDown()、を使用してshutDown()を呼び出した後、すべてのタスクが完了するまで待つことができますexecutorService.awaitTermination(10, TimeUnit.SECONDS)

または、次のことを行うことができます。while (!executorService.isTerminated()) { }

于 2012-03-05T12:59:20.453 に答える