Java 定时器 提姆er 的使用.

一、概念

     
定时安排义务功能在Java中举足轻重采纳的就是提姆er对象,它在中间使用八线程的格局举行拍卖,所以它和二十四线程技术如故有很是大的关系的。在JDK中提姆er类紧要负责陈设任务的效应,也就是在指定的时日先导实施某一个义务,但包装任务的类却是提姆erTask类。

      通过一连 提姆erTask 类 并贯彻 run() 方法来自定义要实施的天职:

public class Mytask extends TimerTask {
    @Override
    public void run()
    {
        DateFormat dateFormat = TimeUtil.df.get();
        System.out.println("我的任务运行了" + dateFormat.format(new Date()));
    }
}

      通过举行提姆er.schedule(提姆erTask task,Date time)
在推行时间运作职分:

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

    public static void main(String[] args) throws ParseException
    {
        timer.schedule(new Mytask(), TimeUtil.df.get().parse("2017-09-14 09:19:30"));
    }
}

备注:时间更换工具类,有限协助线程安全:

图片 1图片 2

public class TimeUtil
{
    public static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>() {
        @Override
        protected DateFormat initialValue() {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        }
    };
}

时间更换工具类 

二、提姆er类注意事项

1、创设一个 提姆er
对象就是新启动了一个线程,可是那么些新启动的线程,并不是看护线程,它直接在后台运行,通过如下
可以将新启动的 提姆er 线程设置为守护线程。

private static Timer timer=new Timer(true);

 2、提早:当布署时间早于当前岁月,则职责马上被运行。

 3、延迟:提姆erTask
是以队列的法子一个一个被逐个运行的,所以举行的时日和你预期的时日或许差异等,因为前面的天职可能损耗的光阴较长,则后边的职务运行的时光会被推移。延迟的职分切实可行伊始的年华,就是依据前面义务的”停止时间”

图片 3

 

4、周期性运行:提姆er.schedule(提姆erTask task,Date firstTime,long
period) 从 firstTime 起始每隔 period 毫秒执行四回职分:

图片 4

 

5、schedule(提姆erTask task,long delay)
当前的时光为参照时间,在此时间基础上延缓制定的微秒数后执行五回提姆erTask任务。

6、schedule(提姆erTask task,long delay,long period)
当前的时刻为参考时间,在此基础上延缓制定的微秒数,再以某一间隔时间无限次数地实践某一职分。

7、Timer的cancel() 和 TimerTask的cancel() 的区别?

前方提到职务的施行是以对列的情势一个个被依次执行的,提姆erTask.cancel()
指的是 把当前义务从职分对列里裁撤。提姆er.cancel()
值的是把当前任务队列里的有着职务都收回。值得注意的是,提姆er
的cancel()有时并不一定会停下实施布署职分,而是正常实施。那是因为提姆er类中的cancel()方法有时并不曾抢夺到queue锁,所以提姆erTask类中的职责再三再四健康实施。

图片 5

三、scheduleAtFixedRate(TimerTask task,Date firstTime,long period) 和 schedule(TimerTask task,Date firstTime,long period) 区别

相同点:

1、方法schedule 和办法 scheduleAtFixedRate
都会按梯次执行,所以不要考虑非线程安全的事态。

2、方法schedule 和办法 scheduleAtFixedRate
如果实施义务的年月不曾被延缓,那么下三次职分的施行时间参考的是上一遍的天职的”初步”时的小时来测算的。

3、方法schedule 和措施 scheduleAtFixedRate
倘若执行任务的时光被推移了,那么下四遍职分的实施时间参考的是上四遍义务”停止”时的年月来计量。

图片 6

图片 7

不同点:

      方法schedule 和办法 scheduleAtFixedRate
在选取上基本没什么差距,就是 scheduleAtFixedRate
具有追赶执行性,什么看头呢?就是若是职务在周期性运行进程中被打断了,scheduleAtFixedRate
会尝试把前边落下的任务补上运行。而schedule就不管了,接着运行接下去的天职就行了,能够参考那篇博客,写的很活跃。

相关文章