4

以前は、間隔ScheduledThreadPoolExecutor.scheduledAtFixedRateごとに実行するタスクをスケジュールしていましたdt

しかし、タスクをすぐに強制的に実行したい場合もあります。タスクの実行後、スケジュールを通常に戻したい。(つまり、dtこの「強制」実行からしばらくしてから、タスクを再度実行する必要があります)。

でそれを行うことは可能ScheduledThreadPoolExecutorですか?方法を教えていただけますか?いくつかの簡単な例は素晴らしいでしょう!

スケジュールをシャットダウンし、タスクを手動で実行し、scheduleAtFixedRate再度呼び出すだけでこれを行うことができると思いますが、それが良い方法かどうか疑問に思っています。

ありがとう

4

2 に答える 2

2

それは良い質問です。を呼び出しcancel()ScheduledFuture<T>受け取った を呼び出しscheduledAtFixedRate()、 を使用してタスクを手動で送信し、submit()固定レートのタスクが戻ってきたら再度スケジュールを変更できますFutureか? タスクがまだ実行されていないことを確認する必要があると思います。

いくつかの擬似コード...

ScheduledFuture<Thingy> sf = executor.scheduleAtFixedRate(myTask, etc...);
sf.cancel();
final Future<Thingy> f = executor.submit(myTask);
f.get();
sf = executor.scheduleAtFixedRate(myTask, etc...);

私はそれをしたことがありません、それは興味深い質問です。

于 2013-04-08T20:17:16.090 に答える
-1

ワンショット実行用

ScheduledFuture<Thingy> sf = executor.schedule(myTask, 0, SECONDS);

これはmyTask一度だけすぐに実行されますが、以前にスケジュールされたタスクの実行を間隔を置いて停止しません。それは本当に問題ですか?

于 2013-04-08T20:35:09.490 に答える