Java基础巩固之Timer定时器
来源:互联网 发布:数据报表格式 编辑:程序博客网 时间:2024/05/16 12:46
Java定时器的实现需要用到两个类 java.util.Timer及java.util.TimerTask
定时器的应用:
1、晚于当前多少时间后执行;
public static void main(String[] args) throws Exception{new Timer().schedule(new TimerTask(){@Overridepublic void run(){System.out.println("boom...");}}, 2000); //晚于当前时间2秒后执行//每隔1秒输出当前的秒数 用于观察定时器是否按照设置的时间运行while(true){System.out.println(new Date().getSeconds());Thread.sleep(1000);}}
2、每隔一定的时间执行一次;
public static void main(String[] args) throws Exception{new Timer().schedule(new TimerTask(){@Overridepublic void run(){// TODO Auto-generated method stubSystem.out.println("boom2...");}}, 2000, 1000);//2秒后第一次执行,之后没1秒执行一次//每隔1秒输出当前的秒数 用于观察定时器是否按照设置的时间运行while(true){System.out.println(new Date().getSeconds());Thread.sleep(1000);}}
3、交错执行 如2秒后执行一次,间隔4秒后执行一次,再间隔2秒后执行一次,如此循环;
a、第一种实现方式
创建一个类(MyTimerTask),并创建一个静态变量用于记录对象被创建的次数;
class MyTimerTask extends TimerTask{ //用于记录对象被创建的次数 private static int count = 0; @Override public void run() { count = (++count % 2); System.out.println("boom3..."); new Timer().schedule(new MyTimerTask(), 2000 + (2000 * count)); } }main方法调用定时器
public static void main(String[] args) throws Exception{new Timer().schedule(new MyTimerTask(), 2000);//每隔1秒输出当前的秒数 用于观察定时器是否按照设置的时间运行while(true){System.out.println(new Date().getSeconds());Thread.sleep(1000);}}
总结:通过count变量计算出调用的奇偶次数,达到交错执行的目的
b、第二种实现方式
创建两个类(MyTimerTask1和MyTimerTask1),在对象中相互调用;
class MyTimerTask1 extends TimerTask{ @Override public void run() { System.out.println("boom4-1"); //4秒后调用MyTimerTask2 new Timer().schedule(new MyTimerTask2(), 4000); } }class MyTimerTask2 extends TimerTask{ @Override public void run() { System.out.println("boom4-2"); //2秒后调用MyTimerTask1 new Timer().schedule(new MyTimerTask1(), 2000); } }
main方法中调用定时器
public static void main(String[] args) throws Exception{//调用MyTimerTask1new Timer().schedule(new MyTimerTask1(), 2000);//每隔1秒输出当前的秒数 用于观察定时器是否按照设置的时间运行while(true){System.out.println(new Date().getSeconds());Thread.sleep(1000);}}
总结:在两个对象中互相调用达到交错执行的目的。
4、指定某一时刻执行;
public static void main(String[] args) throws Exception{//将字符串转换成DateDate date = stringToDate("yyyy-MM-dd HH:mm:ss","2014-04-26 22:08:00");new Timer().schedule(new TimerTask(){@Overridepublic void run(){// TODO Auto-generated method stubSystem.out.println("Boom...");}}, date);//每个1秒输出当前的秒数 用于观察定时器是否按照设置的时间运行while(true){System.out.println(new Date().getSeconds());Thread.sleep(1000);}}
指定格式字符串转Date
private static Date stringToDate(String fmt, String srcDate)throws Exception{SimpleDateFormat sdf = new SimpleDateFormat(fmt);Date date = sdf.parse(srcDate);return date;}
5、每天的固定时间执行(如每天凌晨1点);
public static void main(String[] args) throws Exception{Date date = stringToDate("yyyy-MM-dd HH:mm:ss","2014-06-06 01:00:00");new Timer().schedule(new TimerTask(){@Overridepublic void run(){// TODO Auto-generated method stubSystem.out.println("Boom...");}}, date, 86400000); //1000 * 60 * 60 * 24 将24小时转换成毫秒 间隔24小时 则从6月6号开始每天凌晨1点执行一次}
如果还需要如每周一至周五某个时间点执行等更多功能的调度器,开源的quartz 应该会满足你
0 0
- Java基础巩固之Timer定时器
- Java基础:定时器Timer
- java基础巩固之-线程
- java多线程之定时器Timer
- java之认识定时器Timer
- java巩固基础之函数(九九乘法表)
- Java基础巩固之线程学习
- Java基础巩固之线程学习
- java基础巩固之常用类
- java基础巩固之反射(一)
- java基础巩固之反射(二)
- java基础巩固之IO(一)
- java基础巩固之IO(二)
- java基础巩固之IO(三)
- java基础巩固之网络编程
- java基础巩固之-Synchonized关键字
- Java多线程值之定时器Timer
- Java定时器之Timer源码剖析
- IOS Push 证书的重新生成
- ASP.NET 使用Listview自动生成插、改、删功能没反应
- 纵即逝的烟花蓄势于纸
- ASP.NET 在Label中显示换行
- javamail 的使用
- Java基础巩固之Timer定时器
- 稍纵即逝的烟花蓄势于纸
- java开源网站
- asp.net 控制显示图片的大小
- Demo.exe 中的 0x10001fdd 处最可能的异常: 0xC0000005: 读取位置 0x0000001c 时发生访问冲突
- pomelo消息推送
- 很有用的算法http://bbs.csdn.net/topics/390768965
- ASP.NET Membership中可以更改的用户信息
- 单件模式(Singleton Pattern)