0

Javaでは、スレッド/タスクを継続的に実行し、指定された実行時間後に終了する適切な方法があります(複数のタイマーを使用しないことが望ましい)?

たとえば、私がTimerTaskを持っている場合、そのタスクを特定のミリ秒数後または特定の時間にTimerクラスで終了するようにスケジュールする方法はないようです。

確かに、数ミリ秒後にタスクを繰り返すようにスケジュールすることはできますが、1 回の反復後にタスクを終了させたい場合はどうすればよいでしょうか? このスケジュールされたタスク内で別のタイマーを実行する必要がありますか? それよりもエレガントな答えを期待しています。

この質問で提供された答えは機能する可能性がありますが、それは私が考えていたものではありません.

基本的に、 C# のクラスのAutoResetプロパティに似たものを探していますSystem.Timers.Timer

4

3 に答える 3

2

を使用してExecutorService、取得したものFutureを取得し、必要な.cancel()時間後に取得できます。

final Future<Whatever> f = executor.submit(...);
TimeUnit.SECONDS.sleep(xxx);
f.cancel(true);

ScheduledExecutorServiceまたは、実行するサービスとキャンセルにを使用するサービスの 2 つのサービスを使用することもできます。

注:TimerTaskシステム時間に依存するため、ScheduledExecutorService代わりに a を使用してください。

于 2013-07-24T03:38:45.017 に答える
0

タスクがループで実行されている場合は、反復ごとに現在の時間を確認し、十分な時間が経過したらループを終了できます。

または、タスクにスリープが含まれる場合は、別のスレッドにタイマーを設定しThread.interruptて、タスクを呼び出すことができます。

他の唯一のオプションは、別のスレッドにタイマーを設定して呼び出すことThread.stopです。ただし、Thread.stop 非推奨であり、Java で一般的なスレッドを安全に停止する方法はありません。

于 2013-07-24T03:21:35.413 に答える