5

私はすべてを試しました。これもJava.util.Timerクラスでスケジュールされたタスクを停止する方法

java.util.TimerTaskを実装するタスクが1つあります

私はそのタスクを2つの方法で呼び出します。

  1. 私はこのようにタイマーをスケジュールします:

    timer.schedule(timerTask、60 * 1000);

  2. 時々私はその作業をすぐに開始する必要があり、動作しているものがある場合はtimerTaskをキャンセルする必要があります

    cancelCurrentWork(); timer.schedule(timerTask、0);

この実装は現在の作業を停止しません:(ドキュメントによると:この呼び出しが発生したときにタスクが実行されている場合、タスクは完了するまで実行されますが、二度と実行されることはありません)

しかし、私はそれを止める必要があります。

public static void cancelCurrentwork() {
 if (timerTask!= null) {
  timerTask.cancel();
 }
}

この実装はタイマーをキャンセルするだけですが、現在実行中のタスクは終了します。

public static void cancelCurrentwork() {
 if (timer!= null) {
  timer.cancel();
 }
}

Thread.kill()など、現在実行中のタックを停止する方法はタイマーにありますか?そのタスクを停止する必要があるときは、すべてのデータを失うようにします。

4

2 に答える 2

6

タイマーがそのトラックでタスクを停止する方法はありません。

実行中のタスク自体に、実行を継続するかどうかをチェックする別のメカニズムが必要になります。たとえばAtomicBoolean keepRunning、タスクを終了するときにfalseに設定した変数を使用できます。

于 2010-10-29T09:08:41.493 に答える
0

タイマーが何らかのファイル/ソケットなどを使用している場合は、タイマーの外部からそのオブジェクトを閉じることができます。タイマータスクは例外をスローし、それを使用してタイマーを停止できます。

しかし、一般的に、別のスレッド/タイマーを正常に停止するには、ある種の毒薬が必要です。

于 2010-10-31T06:10:07.083 に答える