Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Javaでも。
[go: Go Back, main page]

■Timer と TimerTask

一定時間ごとに処理を実行する

今回は気分転換に java.util.Timer と java.util.TimerTask を試してみます。
この 2 つを使うと一定時間ごとに処理を実行するコードを簡単に書くことができます。

使い方はどことなく Thread の使い方に似ています。
ざっくりと手順を並べると次のようになります。

  1. TimerTask を継承したクラスを作成、run() メソッド内に処理内容を記述する。
  2. Timer クラスのインスタンスを生成する。
  3. Timer の schedule() or scheduleAtFixedRate() メソッドで実行開始。このとき 1 のインスタンスを引数として渡す。

はい。簡単。
Timer を生成するときの引数や、 schedule() , scheduleAtFixedRate() メソッドの引数で細かい動きの制御も可能です。

サンプルコード

と、いうわけでストップウォッチっぽいサンプルを書いてみました。

StopWatch.java
まずは TimerTask を継承したクラスを作りました。
定期的に呼ばれる処理、run() の中身は変数 second をインクリメントしてその内容を出力するだけです。

package javademo.timertest;

import java.util.TimerTask;

public class StopWatch extends TimerTask{

    private long second;
    
    public StopWatch() {
        super();
        second = 0;
    }

    public void run() {
        second++;
        System.out.println("StopWatch:" + second + " sec.");
    }
    
}

TimerTest.java
main() メソッドを持つクラスです。
メインの処理を記述しています。
ちなみに下記のコード中で呼び出している Timer の cancel() メソッドは繰り返し処理を中断するメソッドです。

package javademo.timertest;

import java.io.IOException;
import java.util.Timer;

public class TimerTest {

    public static void main(String[] args) {
        Timer timer = new Timer();
        StopWatch stopWatch = new StopWatch();
        
        timer.scheduleAtFixedRate(stopWatch,0,1000);
        
        try {
            System.out.println("Key Press End StopWatch.");
            System.in.read();
            timer.cancel();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

まとめ

一定時間ごとに繰り返し処理を実行するには Timer , TimerTask クラスを使うと簡単。

今回は他に結構情報があったので詳しい情報はそちらへ。

参考サイト
Timerを使う。周期的に実行したり、一定時間後に実行したり
@IT Javaのタスクを定期的に実行する