Timer执行延时任务
package com.jd.schdule;import java.util.Timer;import java.util.TimerTask;/** * Timer执行延时任务 * 缺点: * 1、当一个Timer指定多个TimerTask时,一个TimerTask的延时可能会影响后续TimerTask的运行 * 2、当TimerTask抛出未检查异常,Timer线程将被关闭,同时也可能影响调用线程。 * 3、基于服务器绝对时间(基于绝对时间为什么是缺点??) * Timer代替类,参见 http://medicine.iteye.com/blog/1564950?* @author yfzhangbin */public class TimerTest {public static void main(String[] args) {Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("开始第一个任务");try {Thread.sleep(5000);} catch(Exception e) {e.printStackTrace();}if (true) {//throw new RuntimeException("error"); // 解除注释 程序运行到此处将结束Timer线程,并抛出异常}System.out.println("结束第一个任务");}}, 1000);timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("开始第二个任务");try {Thread.sleep(5000);} catch(Exception e) {e.printStackTrace();}System.out.println("结束第二个任务");}}, 1000);System.out.println("主线程结束!"); // 因为Timer线程非后台线程,所以主线程执行完毕后jvm不会结束。}}
?输出:
主线程结束!开始第一个任务结束第一个任务开始第二个任务结束第二个任务
?解除throw注释:
主线程结束!开始第一个任务Exception in thread "Timer-0" java.lang.RuntimeException: errorat com.jd.schdule.TimerTest$1.run(TimerTest.java:30)at java.util.TimerThread.mainLoop(Timer.java:512)at java.util.TimerThread.run(Timer.java:462)