1。コンセプト
時限スケジュールされたタスク関数は、主にJavaのタイマーオブジェクトを使用します。これは、処理に内部的にマルチスレッドを使用するため、マルチスレッドテクノロジーに非常に関連しています。 JDKでは、タイマークラスは主にタスクの計画機能、つまり特定のタスクを指定された時間に実行し始めますが、タスクをカプセル化するクラスはTimerTaskクラスです。
TimerTaskクラスを継承し、run()メソッドを実装して実行するタスクをカスタマイズします。
パブリッククラスMyTask拡張temertask {@Override public void run(){dateformat dateformat = chightil.df.get(); system.out.println( "私のタスクは実行されています" + dateformat.format(new date())); }}Timer.schedule(TimerTaskタスク、日付時刻)を実行して、実行時にタスクを実行します。
public class run {private staticタイマータイマー= new Timer(); public static void main(string [] args)throws parseexception {timer.schedule(new mytask()、tamtil.df.get()。parse( "2017-09-14 09:19:30")); }}注:時間変換ツールクラスにより、スレッドの安全性が保証されます。
public class themutil {public static final threadlocal <dateformat> df = new threadlocal <dateformat>(){@override Protected dateformat initialValue(){return new SimpledateFormat( "yyyy-mm-dd hh:mm:ss"); }};} 2。タイマークラスの予防策
1.タイマーオブジェクトの作成は、新しいスレッドが開始されることを意味しますが、新しく開始されたスレッドはデーモンスレッドではありません。バックグラウンドで実行されています。新しく開始されたタイマースレッドは、次のデーモンスレッドとして設定できます。
プライベート静的タイマータイマー=新しいタイマー(TRUE);
2。事前に:計画時間が現在よりも早くなる場合、タスクはすぐに実行されます。
3。遅延:ティマタスクはキューで1つずつ実行されるため、以前のタスクには長い時間がかかり、後続のタスクの実行時間が遅れるため、実行時間は予想時間と矛盾する可能性があります。遅延タスクの特定の開始時間は、前のタスクの「終了時間」に基づいています。
4.定期操作:Timer.schedule(Timertaskタスク、初めての日付、長期)初めて、タスクは期間ごとに実行されます。
5。スケジュール(TimerTaskタスク、長い遅延)現在の時刻は参照時間です。この時間にセット数のミリ秒数を遅らせた後、TimerTaskタスクが実行されます。
6。スケジュール(Timertaskタスク、長い遅延、長期)現在の時刻は参照時間です。これに基づいて、セット数のミリ秒数を遅らせてから、特定の間隔で無限の回数でタスクを実行します。
7. TimerのCancel()とTimertaskのCancel()の違いは何ですか?
前述のタスクの実行は、列の形で1つずつ実行されます。 timertask.cancel()とは、タスクからコラムへの現在のタスクをキャンセルすることを指します。 Timer.Cancel()の値は、現在のタスクキューのすべてのタスクをキャンセルすることです。タイマーのキャンセル()が必ずしも計画されたタスクの実行を停止するわけではなく、正常に実行することがあることは注目に値します。これは、タイマークラスのCancel()メソッドがキューロックを競合しない場合があるため、TimerTaskクラスのタスクは普通に実行され続けているためです。
3.Scheduleatfixedrate(Timertaskタスク、初めて、長期間)とスケジュール(Timertaskタスク、初めて、長期間)の違い
類似点:
1.メソッドスケジュールとメソッドスケジュールフィックスレートは順番に実行されるため、非スレッドの安全状況は必要ありません。
2。メソッドスケジュールとメソッドスケジュールフィックスレートタスクの実行時間が遅延しない場合、次のタスクの実行時間は、前のタスクの「開始」時の時間に基づいて計算されます。
3.メソッドスケジュールとメソッドスケジューリングフィックスレートタスクの実行時間が遅延した場合、次のタスクの実行時間は、最後のタスクの終了時の時間を参照することによって計算されます。
違い:
基本的に、メソッドスケジュールと使用中のメソッドスケジュールフィックスレートの間に違いはありません。つまり、Scheduleatfixedrateにはキャッチアップ実行があります。それはどういう意味ですか?つまり、周期的な動作中にタスクが中断された場合、ScheduleateTfixEdrateは以前にドロップしたタスクを埋めようとします。スケジュールは無視され、次のタスクを実行します。このブログを参照できます。これは鮮明に書かれています。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。