定时器的应用
来源:互联网 发布:标准件网络销售如何做? 编辑:程序博客网 时间:2024/06/13 23:20
一.与定时器相关的两个类
- Timer类
- 定时器对象
- TimerTask类
- TimerTask就是你要定时所干事情的对应的对象
1.schedule(TimerTask,long)
new Timer().schedule(new TimerTask() {//schedule中文为安排,调度,为定时器对应调度事件 @Override public void run() { System.out.println("bomb!!!"); } },3000);//过多少时间再执行run方法;单位是毫秒 while(true) { System.out.println(new Date().getSeconds()); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
2.schedule(TimerTask,long,long)
new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("bomb!!!"); } },5000,3000);//先过5秒执行一次,之后3秒循环执行一次 while(true) { System.out.println(new Date().getSeconds()); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
3.相互循环
有时候可能会碰到一些需求,要你先2秒执行一次,再之后4秒执行一次,再之后2秒执行一次,再之后4秒执行一次,就依次循环执行
- 显然一个定时器肯定得不得行了
- 我们可以在定时器内嵌套一个定时器(俗称子母炸弹)
new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("bomb!!!"); new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("bomb!!!"); } }, 2000); } },4000);
- 但是仅仅只是执行了一次
- 想到了嵌套,当然方法就是一直嵌套,一直往定时器里面加定时器
- 那么我们看看如下的代码有没有问题
new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("bomb!!!"); new Timer().schedule(/*new TimerTask() { @Override public void run() { System.out.println("bomb!!!"); } }*/this, 2000);//这里this就是外边定时器的TimerTask对象 } },4000);
这样真的可以嘛?
答案是否定的
这和炸弹是一个概念,用完了不能再用了,你想用,必须得创建新对象
此时就用要到递归的思想了
class MyTimerTask extends TimerTask{ //内部类 @Override public void run() { System.out.println("bomb!!!"); new Timer().schedule(/*new TimerTask() { @Override public void run() { System.out.println("bomb!!!"); } }*/new MyTimerTask(), 2000);//递归的思想 } } new Timer().schedule(new MyTimerTask(),4000);
- 不过此时效果还没有实现
- 距离成功只差一步之遥了
- 我们可以定义一个静态变量(想想为什么是静态!!!)
- 静态变量初始为0,访问一次内部类就++,用其来控制循环
private static int count = 0; public static void main(String[] args) { class MyTimerTask extends TimerTask{ @Override public void run() { count=(count+1)%2; System.out.println("bomb!!!"); new Timer().schedule(/*new TimerTask() { @Override public void run() { System.out.println("bomb!!!"); } }*/new MyTimerTask(), 4000-2000*count); } } new Timer().schedule(new MyTimerTask(),4000); while(true) { System.out.println(new Date().getSeconds()); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
4.schedule(TimerTask,Date,long)
- Date是指定时间执行
- long是Date对应时间执行后,每过long时间循环执行
还有更多需求,如果是什么工作日周一到周五某时间执行,周末不执行,这种时候可以用开源的QUARTZ来解决
阅读全文
1 0
- 定时器的应用:俄罗斯方块
- 定时器quartz的应用
- 计数器定时器的应用
- 定时器的应用举例
- MFC定时器的应用
- MFC定时器的应用
- MFC定时器的应用
- MFC定时器的应用
- 定时器的应用
- 定时器的应用2
- Oracle定时器的应用
- NSTimer 定时器的应用
- 5.4 定时器的应用
- 定时器的应用
- javascript定时器的应用
- 定时器的应用
- STM32F2xx的定时器的应用
- STM32F2xx的定时器的应用
- 开源的excel读取库libxls在windows下的编译,且支持中文,全网首发
- Linux是什么
- project Eulert 学习笔记 之 problem 8
- Java进阶(十三)详解equals()方法
- Oracle SQL语句 on和where having的区别
- 定时器的应用
- Powerbuilder调用Webservice的两种方法
- 数据库基本语句
- 欢迎使用CSDN-markdown编辑器
- QEMU 简单几步搭建一个虚拟的ARM开发板
- STM32的优先级NVIC_PriorityGroupConfig的理解及其使用
- 监管AI?吴恩达跟马斯克想到一块去了
- 校园 与 公司
- AI一分钟 | 美女机器人竟然想生孩子,太可怕了!比尔·盖茨当选中国工程院外籍院士