定时器在实际的开发中会非常的有用,比如在游戏的开发时间的控制上。也比如在每天的某一个时间点收邮件。定时器的操作主要是对以下两个类操作。
Timer类
TimerTask类
new Timer().schedule(task,time);从参数可以看出Timer调度是指在什么时间time,做什么事task
举下面的例子:比如现在有一个连环炸,10秒后炸(bombing!)一次,以后每隔3秒炸一次,实现的代码如下:
- 代码1-1 10秒后炸(bombing!)一次,以后每隔3秒炸一次
- import java.util.Timer;
- import java.util.TimerTask;
- public class TraditionalTimerTest {
- public static void main(String[] args) {
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- System.out.println("bombing!");
- }
- }, 10000,3000);//10秒以后开始bombing(炸);第一次是10后炸,以后每隔3秒炸
- }
- }
程序每隔3秒会打印一次bombing!,运行的部分截图如下:
那么这个逻辑该如何该如何实现:先2秒炸一下,再4秒炸一下,又是2秒炸一下,接着又是4秒炸一下,以此类推,不断的循环,每次间隔的时间不一样,交替出现。代码如下:
- 1-2 每隔2秒和4秒打印一次bombing!
- import java.util.Date;
- import java.util.Timer;
- import java.util.TimerTask;
- public class TraditionalTimerTest {
- static int count=0;//内部类不能声明静态变量,应该放到外面
- public static void main(String[] args) {
- class myTimerTask extends TimerTask{//内部类里边不能生成静态变量
- //int x=0;//每次都是new的新对象,不能记住上次的值,不是全局的
- @Override
- public void run() {
- count=(count+1)%2;//实现2秒和4秒的循环炸(奇数2秒,偶数4秒)
- System.out.println("bombing!");
- new Timer().schedule(/*new TimerTask() {
- @Override
- public void run() {
- System.out.println("bombing!");
- }
- }*/new myTimerTask(),2000+2000*count);
- //设计一个类,拿这个类去new很多的对象
- }
- }
- new Timer().schedule(new myTimerTask(),2000);//2秒以后开始炸
- while(true){
- System.out.println(new Date().getSeconds());//打印当前是多少秒
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
运行的部分截图:
注:开源工具:quartz实现每隔一定的时间操作。
转载于:https://blog.51cto.com/020618/1182755