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() {

			@Override
			public 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() {

			@Override
			public 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: error
	at 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)

你可能感兴趣的:(timer)