------------------------------------------------------Android培训   Java培训   期待与您交流-----------------------------------------------------------

public
class MyTimer {

/**
*
@param args
*/
private static int count = 0;
public static void main(String[] args) {

// /*
// * 第一种定时器,多少时间后执行任务
// */
// new Timer().schedule(new TimerTask(){
//
// @Override
// public void run() {
// System.out.println("bomb");
// }
//
// }, 10000);
//
//
// /*
// * 为了使结果更清楚现在设置一个计数器(这个要不要不会影响定时器执行任务)
// */
//
// while(true){
// System.out.println(new Date().getSeconds());
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
//// TODO Auto-generated catch block
// e.printStackTrace();
// }
// }




// /*
// * 第二种定时器,多少时间后执行任务,然后按特定的频率重复执行任务
// */
//
//
// new Timer().schedule(new TimerTask(){
//
// @Override
// public void run() {
// System.out.println("bomb");
// }
//
// }, 10000,3000);
//
// while(true){
// System.out.println(new Date().getSeconds());
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }



// /*
// * 第三种定时器,多少时间后执行任务,然后按x时间执行一次再按y时间执行一次,以后就按x时间y时间交替执行
// * 下面例子是三秒钟爆炸后等一秒再炸再等五秒再炸
// * 那就按第一种炸弹的嵌套
// * 可是这种要炸弹无尽爆炸就要嵌套无尽的第一种炸弹
// * 这是不合理的
// * 下面的例子只能爆炸一个循环
// * 那么能不能递归调用呢
// * 这似乎是个好办法,并且好多问题就是这样解决的
// * 看下例
// */
//
// 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");
// new Timer().schedule(new TimerTask(){
//
// @Override
// public void run() {
// System.out.println("bomb");
//
// }
//
// }, 5000);
// }
//
// }, 1000);
// }
//
// }, 3000);
//
//
// while(true){
// System.out.println(new Date().getSeconds());
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
//// TODO Auto-generated catch block
// e.printStackTrace();
// }
// }


// /*
// * 递归调用第三种定时器,多少时间后执行任务,然后按x时间执行一次再按y时间执行一次,以后就按x时间y时间交替执行
// * 运行后发现
// * Exception in thread "Timer-0" java.lang.IllegalStateException: Task already scheduled or cancelled
// at java.util.Timer.sched(Timer.java:358)
// at java.util.Timer.schedule(Timer.java:170)
// at myThread.MyTimer$1.run(MyTimer.java:130)
// at java.util.TimerThread.mainLoop(Timer.java:512)
// at java.util.TimerThread.run(Timer.java:462)异常
// * 这是可以理解的因为里面的方法调用的是外面的已经爆炸的炸弹(方法),这当然不行
// * 已经爆炸的炸弹是不会爆炸的
// * 因此要不断的爆炸是要不断地制造炸弹的
// * 看下例
// */
//
// 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, 3000);
// }
//
// }, 3000);
//
//
// while(true){
// System.out.println(new Date().getSeconds());
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
//// TODO Auto-generated catch block
// e.printStackTrace();
// }
// }



/*
* 正确的第三种定时器,多少时间后执行任务,然后按x时间执行一次再按y时间执行一次,以后就按x时间y时间交替执行
* 上例中之所以没有成功是因为没有足够的炸弹(也就是任务)
* 因为用的是timeTask的匿名内部类不能够实例化多个任务(也就是炸弹)
* 因此就把匿名内部类抽取出来实例化炸弹
*/

// class MyTimerTask extends TimerTask{
////首先用一个静态变量记录创建了多少个对象(记录对象的创建要用static)
// @Override
// public void run() {
// count = (count+1)%2;
// System.out.println("bomb");
// new Timer().schedule(new MyTimerTask(), 2000+2000*count);
// }
//
// }
//
// new Timer().schedule(new MyTimerTask(), 3000);
//
//
// while(true){
// System.out.println(new Date().getSeconds());
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
//// TODO Auto-generated catch block
// e.printStackTrace();
// }
// }


//如果定义在每天的一个时间点执行某种任务可以使用schedule(TimerTask task, Date firstTime, long period)
//使用定义在每周一到周五的一个时间点执行任务,周末休息可以上网查组件
}

}


------------------------------------------------------Android培训   Java培训   期待与您交流-----------------------------------------------------------
posted on 2011-09-22 11:00  www_ding@163.com  阅读(1272)  评论(0编辑  收藏  举报