【Java多线程与并发库】2.传统定时器技术回顾

Java中的Timer类(java.util.Timer),是最常用的定时类,它可以在隔一段时间之后
再去执行其run方法中设置的代码语句。

使用Timer类定时执行程序有三种方法:
(1)单次定时
new Timer().schedule(task, time);
给Timer类的schedule方法中传入一个TimerTask对象,并重写Task对象的run方法,
将需要定时执行的方法放入其中,然后给schedule方法设置执行时间time(隔几秒执行)。
package cn.edu.hpu.test;

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

public class ThreadTests {

    public static void main(String[] args) {
        new Timer().schedule(new TimerTask(){
            @Override
            public void run() {
                System.out.println("Timer Running...");
            }
        },1000);
    }
}

(2)循环定时
new Timer().schedule(task, firstTime, period);
给Timer类的schedule方法中传入一个TimerTask对象,并重写Task对象的run方法,
将需要定时执行的方法放入其中,然后给schedule方法设置首次执行时间time(隔几秒执行),
循环执行时间period(每多少秒执行一次)。
package cn.edu.hpu.test;

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

public class ThreadTests {

    public static void main(String[] args) {
        new Timer().schedule(new TimerTask(){
            @Override
            public void run() {
                System.out.println("Timer Running...");
            }
        },1000);
        new Timer().schedule(new TimerTask(){
            @Override
            public void run() {
                System.out.println("Timer Running..."+System.currentTimeMillis());
            }
        },1000,2000);
    }
}

执行之后
Timer Running...1474617078660
Timer Running...
Timer Running...1474617080667
Timer Running...1474617082670
Timer Running...1474617084674
Timer Running...1474617086678

第一个定时器只执行了一次就结束了,而后面的一秒后每隔两秒就执行一次。

(3)循环定时的递归实现
我们可以编写一个继承TimerTask的子类,来在run中编写要执行的方法,然后我们在
run方法中继续调用run方法,实现递归定时执行,也就是变相的循环定时:
package cn.edu.hpu.test;

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

public class ThreadTests {

    public static void main(String[] args) {
        new Timer().schedule(new TimerTask(){
            @Override
            public void run() {
                System.out.println("Timer Running...");
            }
        },1000);
        
        new Timer().schedule(new MyTimerTask(),2000);
    }
}
class MyTimerTask extends TimerTask{
    @Override
    public void run() {
        System.out.println("MyTimer Running..."+System.currentTimeMillis());
        new Timer().schedule(new MyTimerTask(),2000);
    }
}

执行之后
Timer Running...
MyTimer Running...1474617452607
MyTimer Running...1474617454613
MyTimer Running...1474617456617
MyTimer Running...1474617458620
MyTimer Running...1474617460626

第一个定时器只执行了一次就结束了,而后面的一秒后每隔两秒就执行一次。

转载请注明出处:http://blog.csdn.net/acmman/article/details/52639319

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值