3

タイマーが切れた後に実行する特定のコード ブロックが必要です。ただし、フラグが設定されている場合、タイマーはすぐに終了する必要があります。

組み込みの Timer クラスを使用して、特定の間隔でタスクをスケジュールできます。問題は、そのクラスのインスタンスをスケジュールしてキャンセルできるのは 1 回だけであり、その後、タイマーが既にキャンセルされているというエラーが発生することです。

簡単な解決策は、Timer の新しいインスタンスを毎回作成することです。しかし、ここでは無限の while ループがあり、同じインスタンスを再利用する必要があるため、これは不可能です。

別の方法は、スレッドを使用してカスタム タイマー関数を作成することです。私はそれを試しましたが、スレッドはすぐには実行されないため、タイマーをキャンセルしてもすぐにはキャンセルされませんが、数ミリ秒後にスレッドが実装された場合にのみキャンセルされます。

他にどのようなオプションがありますか?

また、 https://stackoverflow.com/questions/19585841/timer-instance-in-loop-in-javaを参照してください。

4

1 に答える 1

1

ScheduledExecutorServiceを見てください。

実行中のタスクをキャンセルしたい場合Future<?>は、タスクが送信されたときに返されたオブジェクトへの参照を保持してからcancel()、future を呼び出す必要があります。

エグゼキューターを完全に停止したい場合は、shutDown()と方法があります。shutDownNow()

于 2013-10-25T09:03:16.077 に答える