この記事では主に Java での Timer および TimerTask タイマーとスケジュールされたタスクの使用例を紹介します。必要な方は参考にしてください。
これら 2 つのクラスは非常に便利で、使い方を完了できます。ほとんどの要件
Timer クラスは、パラメータとして TimerTask を受け取ります
Timer にはタスクを実行するための 2 つのモードがあり、2 つの方法でタスクを実行できます。 : 1: 一定時間後 (Data)、2: 一定時間後 (int遅延) どちらのメソッドもタスクの実行頻度を指定できます
TimerTest.Java:
package com.cn; import java.io.IOException; import java.util.Timer; public class TimerTest{ public static void main(String[] args){ Timer timer = new Timer(); timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒执行一次,如果传递一个Data参数,就可以在某个固定的时间执行这个任务. while(true){//这个是用来停止此任务的,否则就一直循环执行此任务 try{ int in = System.in.read(); if(in == 's'){ timer.cancel();//使用这个方法退出任务 break; } } catch (IOException e){ // TODO Auto-generated catch block e.printStackTrace(); } } } static class MyTask extends java.util.TimerTask{ public void run(){ System.out.println(""); } } }
このタイプのランタイム:
1秒プログラム開始後、コンソールに「————」が表示されます
2秒後にMyTaskのrun()メソッドが実行され、「————」が表示されます
これがループし続けます
の文字がコンソールに入力されると、タイマーが作業をキャンセルします
ループ全体から抜け出します
プログラムが終了します!
TimerTest2.java:
package com.cn; import java.io.IOException; import java.util.Date; import java.util.Timer; public class TimerTest2{ public static void main(String[] args){ Timer timer = new Timer(); MyTask myTask1 = new MyTask(); MyTask myTask2 = new MyTask(); myTask2.setInfo("myTask-info-2"); timer.schedule(myTask1, 1000, 2000); //任务1 一秒钟后执行,每两秒执行一次。 timer.scheduleAtFixedRate(myTask2, 2000, 3000); //任务2 2秒后开始进行重复的固定速率执行(3秒钟重复一次) while (true){ try{ //用来接收键盘输入的字符串 byte[] info = new byte[1024]; int len = System.in.read(info); String strInfo = new String(info, 0, len, "GBK");//从控制台读出信息 if (strInfo.charAt(strInfo.length() - 1) == ' '){ strInfo = strInfo.substring(0, strInfo.length() - 2); } if (strInfo.startsWith("Cancel-1")){ myTask1.cancel();//退出任务1 // 其实应该在这里判断myTask2是否也退出了,是的话就应该break.但是因为无法在包外得到 // myTask2的状态,所以,这里不能做出是否退出循环的判断. } else if (strInfo.startsWith("Cancel-2")){ myTask2.cancel(); //退出任务2 } else if (strInfo.startsWith("Cancel-All")){ timer.cancel();//退出Timer break; } else{ // 只对myTask1作出判断,偷个懒^_^ myTask1.setInfo(strInfo); } } catch (IOException e){ // TODO Auto-generated catch block e.printStackTrace(); } } } static class MyTask extends java.util.TimerTask{ String info = "INFO"; @Override public void run(){ // TODO Auto-generated method stub System.out.println(new Date() + " " + info); } public String getInfo(){ return info; } public void setInfo(String info){ this.info = info; } } }
このクラスは、2 つのスケジュールされたタスク mytask1 と mytask2 を作成します。
mytask1 タスクは、上記の TimerTest クラスの例と同じように使用されます。つまり、指定されたタスクは、指定された遅延から開始され、一定の遅延で繰り返し実行されるようにスケジュールされます。
mytask2タスクは上記の使い方とは異なり、タイマーのscheduleAtFixedRate()メソッドを使用して実行されます。
scheduleAtFixedRate() メソッドは、API1.6.0 で次のように定義されています:
指定されたタスクを指定された時刻に開始するようにスケジュールし、固定レートで繰り返し実行します。後続の実行は、指定された期間で区切られ、ほぼ一定の間隔で行われます。
ほぼ一定の時間間隔とは、固定レート実行では、各実行がスケジュールされた初回実行時間に相対してスケジュールされることを意味します。何らかの理由 (ガベージ コレクションやその他のバックグラウンド アクティビティなど) で実行が遅延した場合、2 つ以上の実行が立て続けに発生し、後続の実行が追いつくことができます。
Timer クラスで一般的に使用されるその他のメソッド:
cancel()
このタイマーを終了し、現在スケジュールされているすべてのタスクを破棄します。
purge()
このタイマーのタスクキューからキャンセルされたタスクをすべて削除します。
schedule(TimerTask task, Date time)
指定された時刻に指定されたタスクの実行をスケジュールします。
TimerTask クラスのその他の一般的に使用されるメソッド:
cancel()
このタイマー タスクをキャンセルします。
run()
このタイマータスクによって実行される操作。
scheduledExecutionTime()
このタスクの最新の実際の実行のスケジュールされた実行時間を返します。
【関連推奨事項】
1. 特別な推奨事項: 「php Programmer Toolbox」V0.1バージョンのダウンロード
以上がJava のタイマーとスケジュールされたタスクの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。