1

を使用して呼び出した One Callable があります

FutureTask<Integer> task = new FutureTask<Integer>(new MyCallable(name, type));
pool = Executors.newSingleThreadExecutor();
pool.submit(task);

知りたいのですが、実行は後で続行されpool.submit(task)ますか、それとも呼び出し可能な実行が完了するのを待ちますか?

要するにthread.join()、Callable のようなメソッドはありますか?

4

2 に答える 2

12

... Callable の thread.join() のようなメソッドはありますか?

このpool.submit(callable)メソッドは を返しFuture、スレッドがプールで使用可能な場合はすぐに実行を開始します。を実行するには、メソッドによって返された値を返す、スレッドとの結合をjoin呼び出すことができます。メソッドがスローした場合、がスローされる可能性があることに注意することが重要です。future.get()call()get()ExecutionExceptioncall()

でラップする必要はありません。スレッドプールがそれを行います。したがって、コードは次のようになります。CallableFutureTask

pool = Executors.newSingleThreadExecutor();
Future<String> future = pool.submit(new MyCallable(name, type));

// now you can do something in the foreground as your callable runs in the back

// when you are ready to get the background task's result you call get()
// get() waits for the callable to return with the value from call
// it also may throw an exception if the call() method threw
String value = future.get();

もちろん、これはあなたのMyCallable道具の場合です。Callable<String>Future<?>、あなたがどんなタイプであっても一致しますCallable

于 2012-09-27T12:11:26.957 に答える
1

task.get()(タスクはFutureTask) は、現在のスレッドがスレッド プーラーによる管理対象タスクの完了を待機することを想定しています。

このメソッドは最終的に、具体的な結果を返すか、タスク中にジョブ スレッドがスローするのと同じチェック済み例外をスローします (ExecutionException にラップされます)。

于 2012-09-27T12:11:41.700 に答える