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

在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()的思考》(点击打开链接)已经说过,这里不再赘述。

时间: 2024-08-07 17:01:28

【Java】利用Timer与TimerTask定时执行任务的相关文章

定时任务:Java中Timer和TimerTask的使用

java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks. 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类的方式创建. 一个完整的Timer: Java代码   java.util.Timer timer = new java.util.Timer(true); // true 说明这个timer以daemon方式运行(优先级低, // 程序结束timer也自动结束),注意,java

java.util.Timer类似于闹钟定时做任务

在web中实现任务计划,相当于实现闹钟的功能,要完成2个步骤: 1.定时器的设置: 2.对这个定时器的启动运行和停止进行实时监听 java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类方式创建. Timer是一种线程设施,用于安排以后在后台线程执行的任务,可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可调度TimerTas

java的Timer和TimerTask

java中Timer类使用的方法是如下的: Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println("abc"); } }, 200000 , 1000); 但是实现的原理是怎么样的.下图是Timer源码的实现方式: 总体来说,Timer中有一个TaskQueue和TimerThread.TaskQueue存放的是任务的堆,最先执行的任务放在最前

Java计时器Timer和TimerTask用法

1 package com.sy.game.test; 2 3 import java.util.Timer; 4 import java.util.TimerTask; 5 6 public class TimeTask { 7 8 public static void main(String[] args) { 9 TimeTask tTask=new TimeTask(); 10 tTask.timeVoid(); 11 } 12 13 public void timeVoid(){ 14

Java中的Timer和TimerTask在Android中的用法(转)

转自:http://blog.csdn.net/zuolongsnail/article/details/8168689 在开发中我们有时会有这样的需求,即在固定的每隔一段时间执行某一个任务.比如UI上的控件需要随着时间改变,我们可以使用Java为我们提供的计时器的工具类,即Timer和TimerTask. Timer是一个普通的类,其中有几个重要的方法:而TimerTask则是一个抽象类,其中有一个抽象方法run(),类似线程中的run()方法,我们使用Timer创建一个他的对象,然后使用这对

Timer and TimerTask计时器

利用Timer和TimerTask做一个计时器 包括开始.停止.暂停.恢复四个功能 需要注意的问题主要有两点: 1.Timer和TimerTask在调用cancel()取消后 不能再执行 schedule语句,否则提示出错 2.只能在UI主线程中更新控件/组件. 在其他线程中,更新控件/组件,会提示出错 package com.example.testtimer2; import java.util.Timer; import java.util.TimerTask; import androi

(原创)在service中定时执行网络操作的几点说明

执行网络操作是耗时操作,即便是在service中也要放到子线程中执行 这里我用到了async-http-client框架来执行异步请求操作 计时用的java原生Timer和TimerTask类 本来这两者分开操作各没有问题 但是如果把异步操作写到TimerTask的run方法里就会出错 E/AndroidRuntime(5799): java.lang.IllegalArgumentException: Synchronous ResponseHandler used in AsyncHttpC

利用crontab系统每天定时备份MySQL数据库

利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的. 1.创建保存备份文件的路径/mysqldata 1 #mkdir /mysqldata 2.创建/usr/sbin/bakmysql文件 1 #vi /usr/sbin/bakmysql 输入 1 2 rq=` date +%Y%m%d ` tar zcvf /mysqldata/mysql$rq.tar.gz /var/lib/mysql /var/lib/mysql是你数据库文件的目录,部分用户是/usr/

C#定时执行

代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Window