博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java Timer定时器管理类
阅读量:4958 次
发布时间:2019-06-12

本文共 3059 字,大约阅读时间需要 10 分钟。

1.java timer类,定时器类。启动执行定时任务方法是timer.schedule(new RemindTask(), seconds*1000);俩参数分别是TimerTask子类,具体执行定时操作所执行的动作,后一个参数是豪秒,代表间隔多久执行一次。

2.TimerTask类,java.util.TimerTask,具体定时执行的操作。里面有个run方法,和线程run方法一样(就是线程)。
5.Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。
TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。
6.Timer可以定时多次执行任务,也可以让Timer在固定时间只执行一次。全都是Timer.sehedule()方法,这是重载方法,可以传多个参数。
timer.scheduleAtFixedRate(timerTask, firstTime, period);以固定间隔时间段多次执行。
timer.schedule(timerTask, firstTime);在固定时间执行一次。
7.Timer和TimerTask之间的关系,Timer是TimerTask的管理工具,一个Timer可以对应多个TimerTask,启动多个TimerTask,并管理他们的执行。
既然是一个Timer可以绑定多个TimerTask,我们就在代码里可以封装一个单例类,封装Timer进去。然后用这一个Timer,去调度和管理所有的TimerTask
timerService.startTimerTask(new AlarmTimerTask(), 3 * 1000, 1 * 1000);
timerService.startTimerTask(new AlarmTimerTask2(), 3 * 1000, 1 * 1000);
8.static方法和普通方法没有任何区别,static方法里面的代码,可以随便new一个对象,前提是在代码运行期间。不要再static代码块里执行这个static方法就行。其他运行期间才调用的static方法,可以里面随便包含普通代码。
如: public static TimerService getInstance() {
Timer timer = new Timer();
return instance;
}
2.java util包是个好用的包,里面有logging日志工具类,还有properties配置文件,timer类。所以确实是个工具包,脸面很多工具类。
java.util,logging
java.util.properties
java.util.timer

4.简单的一个例程:

import java.util.Timer;
import java.util.TimerTask;

/**

* Simple demo that uses java.util.Timer to schedule a task to execute
* once 5 seconds have passed.
*/

public class Reminder {

Timer timer;

public Reminder(int seconds) {

timer = new Timer();
timer.schedule(new RemindTask(), seconds*1000);
}

class RemindTask extends TimerTask {

public void run() {
System.out.println("Time's up!");
timer.cancel(); //Terminate the timer thread
}
}

public static void main(String args[]) {

System.out.println("About to schedule task.");
new Reminder(5);
System.out.println("Task scheduled.");
}
}

5.还有一种方法可以指定任务的执行时间,如下例,指定任务在11:01 p.m.执行:

//Get the Date corresponding to 11:01:00 pm today.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 1);
calendar.set(Calendar.SECOND, 0);
Date time = calendar.getTime();

timer = new Timer();

timer.schedule(new RemindTask(), time);
2.终止Timer线程
默认情况下,只要一个程序的timer线程在运行,那么这个程序就会保持运行。当然,你可以通过以下四种方法终止一个timer线程:

调用timer的cancle方法。你可以从程序的任何地方调用此方法,甚至在一个timer task的run方法里。
让timer线程成为一个daemon线程(可以在创建timer时使用new Timer(true)达到这个目地),这样当程序只有daemon线程的时候,它就会自动终止运行。
当timer相关的所有task执行完毕以后,删除所有此timer对象的引用(置成null),这样timer线程也会终止。

第二种方法:让timer线程成为一个daemon线程(可以在创建timer时使用new Timer(true)达到这个目地),这样当程序只有daemon线程的时候,它就会自动终止运行。

如果设成daemon,那么当main线程 结束的时候,程序只剩下timer这个daemon线程,于是程序不会等timer线程执行task就终止了。
当timer相关的所有task执行完毕以后,删除所有此timer对象的引用(置成null),这样timer线程也会终止。

3.注意:一个Timer仅仅对应一个线程,并不是多个线程,而且Timer本身就是一个线程,。即使是间隔时间多次执行,也是同一个线程。一个Timer绑定的多个TimerTask都是运行在Timer这一个线程里的。可以通过java代码测试一下,Timer启动俩TimerTask,在每个TimerTask里输出当前线程的名字thread.currentThread.getName(),肯定是一样的。多个TimerTask是跑在一个Timer线程里的,且这个线程名字就叫Timer-X

二。java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks。

1什么叫匿名内部类?new对象时候,直接写出来实现代码的类,就是创建匿名类
TimerTask task = new TimerTask() {
public void run() {
... //每次需要执行的代码放到这里面。
}
};

转载于:https://www.cnblogs.com/panxuejun/p/6430408.html

你可能感兴趣的文章
javafx实现一个很有意思的动画
查看>>
javafx实现自定义html编辑器
查看>>
Python自学之乐-继承的新式类与经典类
查看>>
解决新浪微博未安装客户端分享不能带链接问题
查看>>
ionic安装开发环境
查看>>
Java 生成 UUID
查看>>
AWR报告
查看>>
1125. Chain the Ropes (25)
查看>>
Python——Django运行问题
查看>>
编程珠玑
查看>>
x265编译arm平台处理器
查看>>
构建php frame
查看>>
Adobe CS6 安装的时候,安装到AdobeHelp 死掉的解决方法
查看>>
(DCloud)用这个来写H5,好像好厉害的样子哦
查看>>
程序员英语学习(持续更新)
查看>>
vue中使用base64和md5
查看>>
数据库日期查询存在的问题
查看>>
学习Python3基础知识过程中总结
查看>>
IReport 使用技巧二:避免在首尾打印出空白页
查看>>
bzoj 3275: Number
查看>>