您的位置:首页 > 职场人生

《黑马程序员》 传统的定时器的创建方式总结与测试

2014-03-28 11:45 169 查看
------- android培训java培训、期待与您交流! ----------
public class TraditionalTimerTest {
/**
* 定时器的使用
*/
static int count=0;

public static void main(String[] args) {
//传统的定时器的创建方式
//第一种普通的:在指定的时间干一件事情(只干一次)
//		new Timer().schedule(new TimerTask(){
//			@Override
//			public void run() {
//				System.out.println("bombing");
//			}
//		}, 3000);

//第二种:在指定的时间干了一件事情之后然后再过一段时间再干这件事情(循环执行)
//		new Timer().schedule(new TimerTask(){
//			@Override
//			public void run() {
//				System.out.println("bombing");
//			}
//		}, 10000,2000);  //10秒之后执行一下这个代码,然后以后每过2秒再执行这个代码

//		//我们想实现子母弹的效果,即在定时器中还有定时器:
//		new Timer().schedule(new TimerTask(){
//			@Override
//			public void run() {
//				System.out.println("bombing");
//				new Timer().schedule(this, 2000);  //我们不可以使用不同的定时器执行同一个任务
//				//我们该如何操作了?
//				//这里使用的匿名对象,它执行完之后就被系统的GC给回收处理了。
//				//所以我们再使用的时候这个对象是不存在的。即TimerTask执行一次之后它就不存在了
//				//我们做一个类继承TimerTask。然后在TimerTask的run方法中再创建一个新的定时器
//			}
//		}, 2000);  //10秒之后执行一下这个代码,然后以后每过2秒再执行这个代码
//		//我们想实现子母弹的效果,即在定时器中还有定时器:

//交替执行的操作
//		class MyTimerTask extends TimerTask{  //写一个TimerTask的子类,把任务封装在这个类里面
//			@Override
//			public void run() {
//				System.out.println("bombing");
//				//在它的这个里面再创建一个定时器
//				new Timer().schedule(new MyTimerTask(), 2000);  //然后再创建一个定时器执行相同的任务
//			}
//		}
//
//		new Timer().schedule(new MyTimerTask(),2000);
//创建一个定时器定时执行一个任务:在它干一件事情的基础再让它定时干事情
/*26
27
bombing
28
29
bombing*/

//我们想实现这样的效果,就是让任务先毎2秒执行一下,然后再毎4秒执行一下,然后再每2秒执行一下,然后再每4秒执行一下
class MyTimerTask extends TimerTask{  //写一个TimerTask的子类,把任务封装在这个类里面
@Override
public void run() {
count=(count+1)%2;  //0+1%2=1,1+1%2=0  这样就可以实现交互执行了
System.out.println("bombing");
//在它的这个里面再创建一个定时器
new Timer().schedule(new MyTimerTask(), 2000+2000*count);  //然后再创建一个定时器执行相同的任务
}
}

new Timer().schedule(new MyTimerTask(),2000);
//这样的话我们就需要计算出一个类创建对象的个数
//我们可以使用static来做。要么就做两个定时器。然后,在A的定时器的run方法中创建一个新的定时器调用B
//然后在B的定时器的run方法的代码中创建一个新的定时器调用A
/**
*  58
59
bombing
0
1
2
3
bombing
*/

//不停的打印当前的系统:秒
while(true){
try {
Thread.sleep(1000);  //隔一秒打印一下秒值
} catch (InterruptedException e) {
e.printStackTrace();
}//休眠100毫秒
System.out.println(new Date().getSeconds() );
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息