现在的位置: 首页 > 综合 > 正文

【Java】利用Timer与TimerTask定时执行任务

2018年05月06日 ⁄ 综合 ⁄ 共 1091字 ⁄ 字号 评论关闭

在Java里面定时执行一条任务多用于线程与进程配合Thread.currentThread().sleep(XXX);来实现,但是一些小型的任务其实完全利用Timer与TimerTask定时执行,Timer与TimerTask组合跟Thread与Runnable的区别在于,Timer与TimerTask是纯粹的单线程定时执行任务的计时器,相当于Thread与Runnable配合Thread.currentThread().sleep(XXX);的特殊情况,但程序写法定时器没有线程那么复杂。Thread与Runnable强调一个任务多个线程去完成。下面,举个小小的例子,说明Timer与TimerTask的用法。

一、基本目标

要求Java每一秒向控制台输出当前的时间。

当然,你改两改就可以让Java每X秒做任何事。

由于Java无法对控制台清屏,使用网上的各种方法也不甚理想,最贴近的是直接打印50个换行,但这在eclipse里面很难看。所以无法做到如同《【JavaScript】一个同步于本地时间的动态时间》(点击打开链接)计时器的效果。当然,你做成Swing界面或许能够实现。这里为了说明Timer与TimerTask就没有需要做这么复杂了。

二、制作过程

这里无须用到AWT的ActionListen这么复杂,代码如下,短短的几行就完成了。

import java.text.SimpleDateFormat;
import java.util.*;

class MyTask extends TimerTask {
	public void run() {
		//时间输出
		System.out.println(new SimpleDateFormat("yyyy年MM月dd日hh:mm:ss E")
				.format(new Date(System.currentTimeMillis())).toString());
	}
}

public class SecondTimer {
	public static void main(String[] args) {
		Timer timer = new Timer();
		timer.schedule(new MyTask(), 0, 1000);
	}
}

schedule方法中的参数,代表要执行MyTask这个继承了TimerTask并且如同线程一样重写了run()函数的方法,而且在之后的第0秒开始,每1000毫秒执行一次MyTask类中的run()方法。

Java怎么去到当前系统的日期,我此前在《【Java】有关System.currentTimeMillis()的思考》(点击打开链接)已经说过,这里不再赘述。

抱歉!评论已关闭.