携帯電話では、定期的なゴミ掃除や目覚まし時計などのタイミング機能が増えています。タイミング機能は主に Java の Timer オブジェクトを使用し、内部ではマルチスレッド技術を使用します。
主に Time クラスが担当する関数です。スケジュールされたタスクを完了するには、指定された時間の開始時にタスクを実行します。Timer クラスの機能は、スケジュールされたタスクを設定することであり、タスクの内容をカプセル化するクラスは、TimerTask クラスです。継承が必要です run メソッドを実装します。
ドキュメントを確認すると、Timer には次のコンストラクターがあることがわかります:
Timer には非常に多くのメソッドがあります:
ここで、タイマーを使用して単純なメソッドを完了します。プロジェクトの実行後 3 秒後に、目覚まし時計の機能をシミュレートするために「起きる時間です」がコンソールに出力されました。
package com.wang.reflect; import java.util.Timer; import java.util.TimerTask; class MyTask extends TimerTask{ @Override public void run() { System.out.println("您该起床了!!!!"); } } public class TimerDemo { public static void main(String[] args) { //创建定时器对象 Timer t=new Timer(); //在3秒后执行MyTask类中的run方法 t.schedule(new MyTask(), 3000); } }
実行後、コンソールにかなりの量のテキストが出力されることがわかりました。 3 秒後、タスクは実行されましたが、プロセスは破棄されず、まだ赤いステータスのままです。原因は何ですか?
この新しいスレッドはデーモンではありません。
In Time クラスと TimerTask クラスの両方に cancel() メソッドがあります。
TimerTask クラスの機能は、タスク キューから自身をクリアすることです (Timer オブジェクトは実行できます)。複数の Timerask タスク)、Timer クラスの機能は次のとおりです: タスク キュー内のすべてのタスクをクリアします。
指定したディスク上のディレクトリ内のすべてのファイルを定期的に削除する例を以下に記述します。
package com.wang.reflect; import java.io.File; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask; class MyTask extends TimerTask{ /** * 定时删除指定位置的文件,(这里以删除f盘下aa文件夹的所有文件为例) */ @Override public void run() { File file=new File("f://aa"); deleteFolder(file); } public void deleteFolder(File file){ File[] files=file.listFiles(); for(File f:files){ if(f.isDirectory()){ //使用递归 deleteFolder(f); }else{ f.delete(); } } file.delete(); } } public class TimerDemo { public static void main(String[] args) throws ParseException { //创建定时器对象 Timer t=new Timer(); String time="2016-04-04 11:26:40"; Date d=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time); t.schedule(new MyTask(), d); } }
上記のテストの場合に注意してください。コード、私が指定した Date 型の時刻、それは早くなります