zoukankan      html  css  js  c++  java
  • 任务调度之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); } } }

    会输出:

    调度完成。

    时间到!

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

  • 相关阅读:
    Linux----------系统管理之释放内存
    阿里云OSS挂载到ECS(注意fuse版本,必须和源码对应)
    数据库图形化管理工具navicat
    linux集群管理工具clustershell
    记一次nginx启动报错
    虚拟化之KVM
    虚拟化之-XEN(未完待续)
    虚拟化
    Linux----------Jenkins基础
    Linux日常系统管理命令
  • 原文地址:https://www.cnblogs.com/yanze/p/10689269.html
Copyright © 2011-2022 走看看