ホームページ  >  記事  >  Java  >  Java のタイマーとスケジュールされたタスクの例

Java のタイマーとスケジュールされたタスクの例

Y2J
Y2Jオリジナル
2017-05-16 09:55:591809ブラウズ

この記事では主に 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バージョンのダウンロード

2. Javaチュートリアルマニュアル

以上がJava のタイマーとスケジュールされたタスクの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。