码迷,mamicode.com
首页 > 其他好文 > 详细

任务调度之Timer与TimerTask配合

时间:2019-04-11 14:47:12      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:print   任务   业务   管理   stat   sch   重要   []   相关   

什么是任务调度?

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

 

任务调度有多种方式

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); } } }

会输出:

调度完成。

时间到!

 

原理: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类的线程安全的

 

任务调度之Timer与TimerTask配合

标签:print   任务   业务   管理   stat   sch   重要   []   相关   

原文地址:https://www.cnblogs.com/yanze/p/10689269.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!