您的位置:首页 > 编程语言 > Java开发

多线程之任务调度

2018-03-25 11:28 232 查看
Timer定时器类
TimerTask任务类
通过java timer timetask:(Spring的任务的任务调度就是通过他们实现的)
在这种实现方式中,Timer类实现的是类似于闹钟的功能,也就是定时或者每隔一定时间触发一次线程。其实,Timer类本身实现的就是一个线程,只是这个线程是用来实现调用其它线程的。而TimerTask类是一个抽象类,该抽象类继承自Object并实现了Runnable接口,所以该类也就具备了多线程的能力
public abstract class TimerTaskextends 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实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息