定时任务,Java(一)

时间:2021-10-01 07:53:04

总的来说,优先级:Quartz > ScheduledThreadPoolExecutor  > Timer

 

方式

调度方式

线程方式

异常处理

Timer(不建议使用) 基于绝对时间,因此任务对系统时间的改变是敏感的 用单线程方式来执行所有的TimerTask,如果某个TimerTask很耗时则会影响到其他TimerTask的执行 不会捕获由TimerTask抛出的未检查异常,故当有异常抛出时,Timer会终止,导致未执行完的TimerTask不再执行
ScheduledThreadPoolExecutor 基于相对时间。这这同时也意味着,没法实现“请在每天00:05帮我执行myTask”这样的需求。 构造一个固定大小的线程池来执行任务 进行了妥善的处理,不会影响其他任务的执行
Quartz 作业+触发器。作业 是能够调度的可执行任务,触发器 提供了对作业的调度。可以处理绝对时间&相对时间。  可以指定线程池大小。  进行了妥善的处理,不会影响其他任务的执行

 

 

 

 

1. Timer

Timer timer = new Timer();
timer.schedule(new TimerTask() {
    private int i=0;
    
    @Override
    public void run() {
        System.out.println("Round " + i++);
    }
}, 0, 5000);//5s

 

2. ScheduleAtFixedRate()

ScheduledThreadPoolExecutor pool = new ScheduledThreadPoolExecutor(5);
        pool.scheduleAtFixedRate(new Runnable() {
            private int i=0;
            @Override
            public void run() {
                System.out.println("Round " + i++);
            }
        }, 0, 5, TimeUnit.SECONDS);

 

 

3. Quartz

看课堂二:http://www.cnblogs.com/alipayhutu/archive/2012/06/05/2536617.html

 

 

 

http://www.ibm.com/developerworks/cn/java/j-quartz/

http://www.opensymphony.com/quartz/

http://blog.csdn.net/szwangdf/article/details/6158646

http://blog.csdn.net/masterseventeen/article/details/3443114