タイマーにはタスクを実行するための 2 つのモードがあり、最も一般的に使用されるのは 2 つの方法でタスクを実行できるスケジュールです。1: 一定時間後 (Data)、2: 一定時間後 (int遅延) この 2 つを指定できます。次のいずれかの方法でタスクの実行頻度を調整する簡単な例を見てみましょう。
次のようにコードをコピーします。
インポート java.io.IOException;
java.util.Timerをインポートします。
パブリック クラス TimerTest {
public static void main(String[] args){
タイマー timer = new Timer();
timer.schedule(new MyTask(), 1000, 2000); //毎回 2 秒間隔でこのタスクを実行します。Data パラメーターを渡すと、このタスクを一定の時間に実行できます。
while(true){//これはこのタスクを停止するために使用されます。それ以外の場合は、このタスクをループで実行し続けます。
試す {
int ch = System.in.read();
if(ch-'c'==0){
timer.cancel();//このメソッドを使用してタスクを終了します
}
} キャッチ (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
静的クラス MyTask は java.util.TimerTask{ を拡張します
@オーバーライド
public void run() {
// TODO 自動生成されたメソッド スタブ
System.out.println("________");
}
}
}
JDKを使用している場合5 以降では、scheduleAtFixedRate モードも利用できます。このモードでは、タイマーは固定頻度でタスクを実行するよう最善を尽くします。たとえば、上記の例では、MyTask を 1 秒後に実行するようにします。は 2 秒に 1 回実行されますが、Java はリアルタイムではないため (実際、Java のリアルタイム パフォーマンスは非常に悪いです...)、前のプログラムで表現された本来の意味を厳密に実装することはできません。scheduleAtFixedRate を呼び出すと、Timer はタスクの実行頻度を 2 秒ごとに維持しようとします。次のシナリオが可能です: 1 秒後、MyTaskシステムがビジーであるため、MyTask は 2 回目に実行されます。その後、タイマーはこの遅延を記録し、次のタスクでこの遅延を埋め合わせようとします。その後、1.5 秒後に MyTask が実行されます。 3 回。「固定の遅延時間ではなく、固定の頻度でタスクを実行します」。
以下はより複雑な例で、単一の TimerTask を終了する方法とすべてのタスクを終了する方法を示しています。
次のようにコードをコピーします。
パッケージMyTimerTest;
インポート java.io.IOException;
java.util.Timerをインポートします。
/*
* このクラスは、タスクのカスタマイズやタスクの追加など、Timer と TimerTaske を使用するための主なメソッドを提供します
* タスクを終了し、タイマーを終了します。
* TimerTask のステータス フィールドはパッケージ レベルでアクセスできるため、java.util パッケージの外部からアクセスする方法はありません。
※タスクの状態を取得するため、プログラム上での状態を判断することができません。
*
*/
パブリック クラス TimerTest {
public static void main(String[] args) {
タイマー timer = new Timer();
MyTask myTask1 = new MyTask();
MyTask myTask2 = new MyTask();
myTask2.setInfo("myTask-2");
timer.schedule(myTask1, 1000, 2000);
timer.scheduleAtFixedRate(myTask2, 2000, 3000);
while (true) {
試す {
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();// 単一タスクを終了する
//実際には、myTask2 も終了したかどうかをここで判断する必要があります。そうであれば、パッケージの外から取得できないため、壊れるはずです。
//myTask2 のステータスなので、ここではループを終了するかどうかを判断できません。
else if (strInfo.startsWith("Cancel-2")) {
myTask2.cancel();
else if (strInfo.startsWith("Cancel-All")) {
timer.cancel();//タイマーを終了する
壊す;
} それ以外 {
// myTask1 のみを判断します。怠けてください ^_^
myTask1.setInfo(strInfo);
}
} catch (IOException e) { // TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
静的クラス MyTask extends java.util.TimerTask {
文字列情報 = "^_^";
@オーバーライド
public void run() {
// TODO 自動生成されたメソッド スタブ
System.out.println(info);
}
public String getInfo() {
情報を返す。
}
public void setInfo(String info) {
this.info = 情報;
}
}
}