2

特定の Runnable がエグゼキューター内で実行を終了したときに、待機して通知を受ける方法を探していました。

メソッドを持つFutureTaskを見つけましたgetが、これは値を返します。私のプログラムは戻り値を期待していません。値を返す必要のない FutureTask に似たデータ構造はありますか? FutureRunnableのようなものですか?

ありがとう!

4

2 に答える 2

2

タスクが完了したときに何らかの形で「親スレッドに通知」するメカニズムはありません (理論的にも)。まず、タスクがfestum を投稿submitできないスレッドは、 ExecutorServiceの内部スレッドの親スレッドになります。次に、呼び出し元のスレッドがそのようなイベントのリッスン専用ではない場合、外部から「ジャックイン」されて、実行中のすべてを中断して通知を受け取ることはできません。

標準 Java のExecutorService API では、残念ながらコールバック経由で非同期通知を取得できません。得られるのは、ポーリング メソッドとブロッキング メソッドだけです。

于 2013-05-27T14:02:54.003 に答える
1

たぶん、この方法が必要です。

Runnable を送信すると、Executor によって FutureTask が返されます。

例:

public class MyTask implements Runnable
{
    @Override
    public void run()
    {
        ...
    }
}

ExecutorService s = Executors.newSingleThreadExecutor();
Future<?> submit = s.submit(new Task());
于 2013-05-27T13:57:54.277 に答える