タイマー関数は、指定された時間間隔内で指定されたウィンドウのタイマー イベントを繰り返しトリガーします。構文 Timer (interval {, windowname }) パラメーター interval: Timer イベントを 2 回トリガーする時間間隔を指定します。有効な値は 0 ~ 65 です。この記事では主に Java タイマー Timer の使い方を詳しく紹介します。興味のある方は参考にしてください。
Java のスケジュールされたタスク関数は、主に Timer オブジェクトを使用します。このオブジェクトは内部処理にマルチスレッドを使用するため、依然としてマルチスレッド技術と密接に関係しています。 JDK では、タスクをスケジュールする、つまり指定した時間にタスクを開始する機能は主に Timer クラスが担当しますが、そのタスクをカプセル化するクラスが TimerTask クラスです。 Er Timrtask クラスを継承し、run() メソッドを実装して実行するタスクを定義します:
public class Mytask extends TimerTask { @Override public void run() { DateFormat dateFormat = TimeUtil.df.get(); System.out.println("我的任务运行了" + dateFormat.format(new Date())); } }
備考: スレッドの安全性を確保するための時間変換ツール クラス:
public class Run { private static Timer timer=new Timer(); public static void main(String[] args) throws ParseException { timer.schedule(new Mytask(), TimeUtil.df.get().parse("2017-09-14 09:19:30")); } }
2. Timer クラスに関する注意事項 1. Timer オブジェクトの作成は新しいスレッドを開始することを意味しますが、この新しく開始された Thread はデーモン スレッドではなく、常にバックグラウンドで実行されるように設定できます。次のようなデーモンスレッド。
public class TimeUtil
{
public static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
};
}
2. 進行: 予定時刻が現在時刻より早い場合、タスクはすぐに実行されます。
3. 遅延: タイマータスクはキュー内で 1 つずつ順番に実行されるため、前のタスクの実行時間が長くなり、後続のタスクの実行時間が長くなる可能性があるため、実行時間は予想時間と一致しない可能性があります。遅延。遅延タスクの具体的な開始時刻は、前のタスクの「終了時刻」に基づきます
4. 定期的な操作: Timer.schedule(TimerTask task,Date firstTime,long period) は、開始時刻から一定期間ミリ秒ごとに実行されます。 firstTime タスク: 5. スケジュール (TimerTask タスク、長時間遅延) 現在時刻を基準として、指定されたミリ秒数だけ遅延して TimerTask タスクが実行されます。 6. スケジュール (TimerTask タスク、長い遅延、長い期間) 現在時刻を基準として、指定されたミリ秒数だけ遅れて、あるタスクを一定時刻に無制限に実行します。間隔。 7. Timer の cancel() と TimerTask の cancel() の違いは何ですか? 前述したように、タスクはキュー内で 1 つずつ順番に実行されます。TimerTask.cancel() は、現在のタスクをタスクキューからキャンセルすることを指します。 Timer.cancel() の値は、現在のタスク キュー内のすべてのタスクをキャンセルします。
Timer の cancel() は、スケジュールされたタスクの実行を必ずしも停止するわけではなく、通常どおり実行する場合があることに注意してください。これは、Timer クラスの cancel() メソッドがキュー ロックを競合しない場合があるため、TimerTask クラスのタスクは通常どおり実行され続けるためです。
3.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)とschedule(TimerTask task,Date firstTime,long period)の違い
同じ点:1. scheduleAtFixedRate は順番に Executed を押すため、スレッドの安全性以外の状況を考慮する必要はありません。
2.スケジュールメソッドとメソッドscheduleAtFixedRate タスクの実行時間が遅れていない場合、次のタスクの実行時間は前のタスクの「開始」時間を参照して計算されます。 3.スケジュールメソッドとメソッドscheduleAtFixedRate タスクの実行時間が遅れた場合、前のタスクが「終了」した時間を基準にして次のタスクの実行時間を計算します。
違い:
基本的に、scheduleメソッドとscheduleAtFixedRateメソッドの間に使用上の違いはありませんが、scheduleAtFixedRateには追いつき実行があります。これは何を意味しますか?つまり、定期的な実行中にタスクが中断された場合、scheduleAtFixedRate は以前に削除されたタスクを埋め合わせようとします。スケジュールを無視して次のタスクを実行します。非常に鮮明なこのブログを参照してください。
上記の内容はJavaタイマーTimerの使い方です。
関連する推奨事項:C# タイマー タイマーの例の紹介
C#でのTimerの使用法とリエントランシー問題の解決についての詳細な説明
Javaタイマー(Timer、TimerTask)の詳細な説明とサンプルコード
以上がJavaタイマーの使い方 タイマーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。