定时器(Timer类)详解

今天,小龙想分享一下关于Timer类的一些知识,如果有一些不好的地方,希望大家多多指教。

下面的例子是Timer类的一个基本的用法,我已经在代码上写上注释,这里我就不做过多解释了。

import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
public class TimerDemo {
	public static void main(String[] args) {
		//首先制定一个要执行的任务,因为TimerTask是一个抽象类且实现Runnable接口,所以不能直接new对象且要重写抽象方法
		TimerTask task = new TimerTask(){
			@Override
			public void run() {
				System.out.println("时间到,炸弹爆炸");
			}};
		//定义一个执行任务的时间
		long delay = 2000;
		//调用定时器,设置定时任务
		new Timer().schedule(task, delay);
		//输出当前的时间秒
		while(true) {
			System.out.println(Calendar.getInstance().get(Calendar.SECOND));
			try {
				Thread.sleep(1000);
				break;
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

但是,我们怎么实现一个交替循环的时间来引爆炸弹呢?例如:第一次引爆的间隔时间为3秒,第二次引爆的间隔时间为6秒,第三次引爆的间隔时间为3秒,以此类推。。。

小龙想到了下面这个例子,供大家参考:

import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
public class TimerDemo {
	//由于内部类与方法中不能放静态变量,为了计数,我只能把变量定义在这里
	static int count = 0;
	public static void main(String[] args) {
		class MyTask extends TimerTask {
			@Override
			public void run() {
				count = (count+1)%2;
				System.out.println("count="+count);
				System.out.println("时间到,炸弹爆炸");
				new Timer().schedule(new MyTask(), 3000+3000*count);
			}
		}
		new Timer().schedule(new MyTask(),0);
		while (true) {
			System.out.println(Calendar.getInstance().get(Calendar.SECOND));
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

如果想要实现更多和复杂的任务调度,我们可以用Quartz调度器,它是一个开源的作业调度框架,它完全有java写成,并设计用于J2SE和J2EE应用中,这里小龙就不具体

说这个东西了,如果有需要的朋友,我们可以一起探讨。


你可能感兴趣的:(java,Timer类)