12

スレッドを特定の正確な時間に実行させたい(たとえば、2012-07-1113:12:24および2012-07-1115:23:45)

チェックScheduledExecutorServiceしましたが、最初の実行から特定の期間後の実行のみをサポートし、固定期間はありません。代わりに、データベースからタスクを実行する時間があります。

ここでの別の問題に関する前の質問では、TimerTaskが解決策でしたが、明らかにスレッドをasにすることはできずTimerTaskRunnable両方TimerTaskrun実装する必要のあるメソッドがあります。ここでの質問は、スレッドを拡張TimerTaskして1つの実装があるrun()場合、それは機能しますか?そうでない場合、私がやろうとしていることをどのように行うことができますか?

4

3 に答える 3

17

TimerTaskを使用します。

スレッドとしてフィールド変数を使用してTimerTaskオブジェクトを作成します。TimerタスクのRunメソッドからスレッド開始を呼び出します。

public class SampleTask extends TimerTask {
  Thread myThreadObj;
  SampleTask (Thread t){
   this.myThreadObj=t;
  }
  public void run() {
   myThreadObj.start();
  }
}

このように構成します。

Timer timer  new Timer();
Thread myThread= // Your thread
Calendar date = Calendar.getInstance();
date.set(
  Calendar.DAY_OF_WEEK,
  Calendar.SUNDAY
);
date.set(Calendar.HOUR, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, 0);
// Schedule to run every Sunday in midnight
timer.schedule(
  new SampleTask (myThread),
  date.getTime(),
  1000 * 60 * 60 * 24 * 7
);
于 2012-07-11T12:59:52.383 に答える
4

QuartzSchedulerのようなライブラリを使用したほうがいいと思います。これは基本的にJava用のcronの実装です。

于 2012-07-11T12:26:00.003 に答える
2

java.util.concurrentパッケージのCountDownLatchを見たことがありますか?カウントダウンを提供し、スレッドの実行をトリガーします。自分で使う必要はありませんでしたが、何度か使っているのを見たことがあります。

于 2012-07-11T12:28:04.600 に答える