特定の Runnable がエグゼキューター内で実行を終了したときに、待機して通知を受ける方法を探していました。
メソッドを持つFutureTaskを見つけましたget
が、これは値を返します。私のプログラムは戻り値を期待していません。値を返す必要のない FutureTask に似たデータ構造はありますか? FutureRunnableのようなものですか?
ありがとう!
特定の Runnable がエグゼキューター内で実行を終了したときに、待機して通知を受ける方法を探していました。
メソッドを持つFutureTaskを見つけましたget
が、これは値を返します。私のプログラムは戻り値を期待していません。値を返す必要のない FutureTask に似たデータ構造はありますか? FutureRunnableのようなものですか?
ありがとう!
タスクが完了したときに何らかの形で「親スレッドに通知」するメカニズムはありません (理論的にも)。まず、タスクがfestum を投稿submit
できないスレッドは、 ExecutorServiceの内部スレッドの親スレッドになります。次に、呼び出し元のスレッドがそのようなイベントのリッスン専用ではない場合、外部から「ジャックイン」されて、実行中のすべてを中断して通知を受け取ることはできません。
標準 Java のExecutorService API では、残念ながらコールバック経由で非同期通知を取得できません。得られるのは、ポーリング メソッドとブロッキング メソッドだけです。
たぶん、この方法が必要です。
Runnable を送信すると、Executor によって FutureTask が返されます。
例:
public class MyTask implements Runnable
{
@Override
public void run()
{
...
}
}
ExecutorService s = Executors.newSingleThreadExecutor();
Future<?> submit = s.submit(new Task());