多线程之任务调度

Timer定时器类

TimerTask任务类

通过java timer timetask:(Spring的任务的任务调度就是通过他们实现的)

在这种实现方式中,Timer类实现的是类似于闹钟的功能,也就是定时或者每隔一定时间触发一次线程。其实,Timer类本身实现的就是一个线程,只是这个线程是用来实现调用其它线程的。而TimerTask类是一个抽象类,该抽象类继承自Object并实现了Runnable接口,所以该类也就具备了多线程的能力

public abstract class TimerTask
extends Objectimplements Runnable

如上图所示,该类只有三个方法,其中唯一的抽象方法是run方法,因此在new TimerTask类的时候需要通过内部类实现run方法,将线程想实现的东西写在run方法中,然后在Timer类中通过相关方法启动线程的执行

如下例子:

/**
 * Timer类的schedule方法实现任务调度
 * schedule(TimerTask task, Date firstTime, long period) 
          安排指定的任务在指定的时间开始进行重复的固定延迟执行
 * @author Kermit
 *
 */
public class TestTimer {


public static void main(String[] args) {

Timer time = new Timer();

time.schedule(new TimerTask(){//通过Timer类的schedule调用线程


@Override
public void run() {//在newTimerTask的时候通过内部类实现run方法
System.out.println("so easy!!");


}, new Date(System.currentTimeMillis() + 1000), 200);//当前时间1秒后输出执行run方法,以后每隔0.2秒执行一次
}
}

输出:

so easy!!
so easy!!
so easy!!
so easy!!


在实际使用时,一个Timer可以启动任意多个TimerTask实现的线程,但是多个线程之间会存在阻塞。所以如果多个线程之间如果需要完全独立运行的话,最好还是一个Timer启动一个TimerTask实现。


猜你喜欢

转载自blog.csdn.net/kermit_father/article/details/79684889
今日推荐