Javaマルチスレッドプログラミングコアテクノロジー(第5章タイマTimerノート)


1 JDKライブラリのTimerクラスは主に計画タスクの実行を担当し、カプセル化されたタスククラスはTimerTaskクラスであり、実行タスクのコードはTimerTaskのサブクラスに入れなければならない.TimerTaskは抽象クラスであるからだ.2.使用法:新規クラス統合TimerTask()クラス、設定タイミングクラスprivate static Timer timer=new Timer()使用方法:
package com.satx.thread;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

public class Thread6{

    private static Timer timer = new Timer(true);

    static public class Task extends TimerTask{

        @Override
        public void run() {
            // TODO Auto-generated method stub
            System.out.println(" "+new Date());
        }
    }
    public static   void main(String[] args) throws InterruptedException, ParseException {
        Task task = new Task();
        Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2017-01-24 17:05:30");
        System.out.println(" :"+date+" :"+new Date());
        timer.schedule(task, date);
    }
}

注意:Timer()の値を設定しない場合、デフォルトは非デーモンスレッドで、プログラムの実行時に現在の時間よりも時間が長くスレッドの中を実行し、コンソールは常に実行状態にあり、より小さい時に現在の時間が設定時間に達するのを待つと文が出力され、コンソールも常に実行状態にあります.ただし中がtrueに設定されている場合、このスレッドはデーモンスレッドであり、開始時間が現在時間より大きい場合、スレッドの中の文を出力せずに直接終了し、開始時間が終了時間より小さい場合、出力県城の中の文は終了する.3.TimerTaskはキュー方式で1つずつ順番に実行されるので、実行時間と設定時間に遅れがあるかもしれない.4.timer.schedule(TimerTask task,Date date,long period)は、あるタスク(タイミングタスク)を所定の間隔で周期的に無限ループで実行することを表す.5.タスクの実行時間を遅らせ、実行するタイミングタスクの方法に睡眠時間を加え、4秒間隔、5秒間隔を設定すると、1回目の終了時間は基本的に2回目の開始時間であり、1回目の開始と2回目の開始は基本的に5秒間隔である.6.TimerTaskクラスのcancel()メソッドは、他のタスクに影響を与えないタスクキューから自身を削除することです:this.cancel(); 7.Timerのcancel()メソッドは、タスクキュー内のすべてのタスクを空にし、プロセスを破棄し、ボタンを赤から灰色に変更します.8.timer.schedule(TimerTask task,long delay):現在の時間を基準時間とし、指定したミリ秒数を遅延させてTimerTaskタスクを実行します.9.timer.schedule(TimerTask task,long delay,long period):現在の時間を基準時間とし、delayミリ秒数の後にtaskタスクを実行し、perriodミリ秒をループします.10.timer.scheduleAtFixedRate(TimerTask task,Date date,long period)は、設定時間が現在の時間よりも小さい場合、以前の操作が実行され、scheduleは追跡性を持たない追跡性にある.
public class Thread8{

    private static int count = 0;
    private static Timer timer = new Timer();

    static public class Task extends TimerTask{

        @Override
        public void run() {
            count++;
            System.out.println("begin:"+new Date());
            try {
                //Thread.sleep(3000);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(count == 10){
                timer.cancel();
            }
            System.out.println(count);
            System.out.println("end:"+new Date());
        }
    }
    public static   void main(String[] args) throws InterruptedException, ParseException {
        Task task = new Task();
        System.out.println(new Date());
        Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2017-1-25 11:03:10");
        timer.scheduleAtFixedRate(task, date, 1000);
        //timer.schedule(task, date, 1000);
    }
}