9

私はこのコードを持っています:

ScheduledExecutorService scheduledExecutor;
.....
ScheduledFuture<?> result = scheduledExecutor.scheduleWithFixedDelay(
    new SomethingDoer(),0, measurmentPeriodMillis, TimeUnit.MILLISECONDS);

何らかのイベントの後、 を実装するrun()のメソッドで宣言されたアクションを停止する必要があります。SomethingDoerRunnable

これどうやってするの?Executor をシャットダウンできません。定期的なタスクのみを取り消す必要があります。これに使えますresult.get()か?また、可能であれば、どのように機能するか教えてください。

4

2 に答える 2

15

を使用しresult.cancel()ます。はScheduledFutureタスクのハンドルです。このタスクをキャンセルする必要があり、これ以上実行されません。

実際にcancel(boolean mayInterruptIfRunning)は署名であり、trueパラメーターでそれを使用すると、現在実行中の実行のスレッドがinterrupt()呼び出しで中断されます。スレッドが のような割り込み可能な呼び出しで待機している場合、これは割り込み例外をスローしますSemaphore.acquire()cancel実行を停止すると、タスクがそれ以上実行されないことのみを保証することに注意してください。

于 2013-07-02T07:26:24.180 に答える
5

cancel()オブジェクトからメソッドを使用できScheduledFutureます。キャンセルすると、それ以上のタスクは実行されません。

現在実行中のタスクを停止する場合は、メソッドをコーディングして、割り込みを感知し、メソッドにrun渡して割り込みを要求する必要があります。truecancel()

于 2013-07-02T07:24:11.663 に答える