多线程编程第五章定时器Timer的使用

private static Timer timer = new Timer();
private static Timer timer = new Timer(true);//是守护线程,默认为false
timer.schedule(TimerTask task,Date date);//如果date早于此时,直接执行;task是依次执行的
timer.schedule(TimerTask task,Date date,Long long);//long就是循环时间
task.cancel();//task任务结束
timer.cancel();//所有任务结束,但是不是实时的,可能抢不到线程
timer.schedule(TimerTask task,Long long1);//等待long1毫秒后执行,执行一次
timer.schedule(TimerTask task,Long long1,long2);//等待long1后执行,且每long2执行一次

timer.scheduleAtFixedRate(TimerTask task,Date date,Long long);
与timer.schedule的区别,scheduleAtFixedRate第i次的执行开始时间是date+(i-1)*long时间点,就是不会因为上一个程序的延时而延时,只是会等待;而schedule不是,它的执行时间是上一次的开始时间+long;
简单而言,就是scheduleAtFixedRate具有追赶性

代码

package mon03.timer;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Class0308 {
    private static Timer timer = new Timer(true);

    static public class MyTask extends TimerTask {
        @Override
        public void run() {
            int i = 0;
            System.out.println("开始"+i+","+System.currentTimeMillis());

            try {
                Thread.sleep(2000);//每次执行时间为2s
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("结束"+(i++)+","+System.currentTimeMillis());
        }

    }


    public static void main(String[] args) {
        MyTask task = new MyTask();
        Date date = new Date(System.currentTimeMillis() - 3000);//启动时间为3s前,每次中间为4s
       // timer.scheduleAtFixedRate(task, date, 4000);//此执行效果为1
       // timer.schedule(task, date, 4000);//此执行效果为2

        try {
            Thread.sleep(50000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(System.currentTimeMillis());
        timer.cancel();
    }

}

schedule的执行效果

开始0,1552010641902
结束0,1552010643903
开始0,1552010645903//没有追赶,时间是上一次时间+4s
结束0,1552010647903
开始0,1552010649903
结束0,1552010651903

scheduleAtFixedRate的执行效果

开始0,1552010718951
结束0,1552010720951
开始0,1552010720951//追了,因为应该的时间比此时早,直接执行
结束0,1552010722951
开始0,1552010723950//等了1s后,追上了
结束0,1552010725950
开始0,1552010727950
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值