美文网首页
Timer 的简单使用

Timer 的简单使用

作者: 隐藏的记号 | 来源:发表于2017-11-20 14:03 被阅读25次

Timer 的简单使用: 按照我的理解,Timer 相当于一个线程任务调度器,new 一个 Timer 并且设置它的 schedule 方法可以很方便地决定要执行什么任务,延迟多久才执行,每隔多长时间后再一次执行。
如何设置 Timer对象的 schedule 方法呢?
先来看到 schedule 方法的签名:

        public void schedule(@NotNull java.util.TimerTask task,
                     long delay,
                     long period)

参数理解

可以看到 schedule 方法的参数列表中:

    第一个参数是一个 TimerTask 类对象
    第二个参数是 delay,
    第三个参数是 period。

delay 和 period 的中文意思分别是 “延迟” 和 “周期”。而对于一个定时任务来讲,“延迟”和“周期”是该定时任务的属性。决定了一个定时任务需要延迟多少毫秒(该参数的单位)开始执行,以及循环执行定时任务的周期大小。

第一个参数对于初学者来讲就略显复杂了。我自己也是刚刚接触。TimerTask 本身是一个实现了Runnable接口的抽象类,有线程知识的同学都很清楚,在Runnable接口中,声明了一个run()方法。这个方法是线程的执行任务单元。当一个线程启动之后,要完成的工作就是去执行run()方法。

而TimerTask抽象类实现了Runnable接口,所以TimerTask也存在 run() 方法。 run()方法是线程要执行的任务,所以将这个任务交给定时器的schedule方法。

然后这个定时器在底层会在延迟时间结束后,启动这个线程任务, 并且周期性循环。

代码实例:

    /*
    *测试定时器
    * */
    @Autowired
    private ProductTimerTask productTimerTask = null;  // 定义一个ProductTimerTask对象
    @Test
    public void test8 () {
        new Timer(false).schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("读取数据库数据");
            }
        }, 0, 1000);

        for (int i=0; i<5; i++) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

上面程序中,Thread.sleep(2000)的存在是为了延长测试方法的生命周期,使得定时器的效果得以体现,即每隔1秒往控制台输出1条信息。
(end)

相关文章

网友评论

      本文标题:Timer 的简单使用

      本文链接:https://www.haomeiwen.com/subject/fjdvvxtx.html