任务调度之Timer与TimerTask配合

什么是任务调度?

在实际业务中,我们经常需要定时、定期、或者多次完成某些任务,对这些任务进行管理,就是任务调度。任务调度与多线程密切相关。

任务调度有多种方式

Timer与TimerTask配合

Timer 定时器,能在主线程外另起线程完成任务

TimerTask 实现Runnable接口的抽象类,相当于一个任务

来一个简单的例子:

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

public class TestTimer {
    
    public static void main(String args[]){
new Reminder(3);
        System.out.println("调度完成。");
    }
    
    public static class Reminder{
        Timer timer;
        
        public Reminder(int sec){
            timer = new Timer();
       //开始调度任务 timer.schedule(
new TimerTask(){ public void run(){ System.out.println("时间到!");
            //重要:终止内部线程! timer.cancel(); } }, sec
*1000); } } }

会输出:

调度完成。

扫描二维码关注公众号,回复: 5848404 查看本文章

时间到!

原理:Timer的构造函数里会起一个单独的线程(new Thread())来执行计划任务,并在任务完成后结束线程。

Timer如何终止内部线程?

1、调用timer的cancle方法(最常用,如上例)

2、把timer线程设置成daemon线程,(new Timer(true)创建daemon线程),在jvm里,如果所有用户线程结束,那么守护线程也会被终止,不过这种方法一般不用。

3、当所有任务执行结束后,删除对应timer对象的引用,线程也会被终止。

4、调用System.exit方法终止程序

注意点:

1、每一个Timer仅对应唯一一个线程

2、Timer不保证任务执行的十分精确。

3、Timer类的线程安全的

猜你喜欢

转载自www.cnblogs.com/yanze/p/10689269.html
今日推荐