代码:
import java.util.Timer;
import java.util.TimerTask;public class Test3 {
public static void main(String[] args) {
Timer t1 = new Timer();
t1.schedule(new MyTask(), 0, 5*1000);
} static class MyTask extends TimerTask {
@Override
public void run() {

System.out.println("娃哈哈");
Test4 test4 = new Test4();
test4.dodo();
  }
  }
}-------------------------------------------------import java.util.Timer;
import java.util.TimerTask;
public class Test4 {
public void dodo(){
Timer t2 = new Timer();
t2.schedule(new MyJob(), 0, 1000);
}

class MyJob extends TimerTask{ @Override
public void run() {
System.out.println("==========================");
}

}
}
问题:test3 中的 timertask 每次去执行时,都会在test4中new出新的 timer ,这样导致 test4 中的timer 越来越多;
如何让test3中的timer重复运行时,都把上次在test4中new的timer 都失效 ? 保证最后的输出结果是娃哈哈
====================================
====================================
====================================
====================================
====================================
娃哈哈
====================================
====================================
====================================
====================================
====================================
娃哈哈
====================================
====================================
====================================
====================================
====================================...........

解决方案 »

  1.   

    import java.util.Timer;
    import java.util.TimerTask;public class Test3 {
    public static void main(String[] args) {
    Timer t1 = new Timer();
    t1.schedule(new MyTask(), 0, 5*1000);
    Test4 test4 = new Test4();
    test4.dodo();
    }static class MyTask extends TimerTask {
    @Override
    public void run() {System.out.println("娃哈哈");}
      }
    }
      

  2.   


    大哥,你这个只是蒙蔽了眼睛,我最后要的结果不只是向输出结果那么简单,我必须要在run方法里执行test4.dodo(),所以你这行不通! 如果只是为了显示结果那样,我何必用timer啊!?
      

  3.   


    import java.util.Timer;
    import java.util.TimerTask;public class Test3 {
    public static void main(String[] args) {
    Timer t1 = new Timer();
    MyTask t = new MyTask();
    t1.schedule(t, 0, 5 * 1000);
    } static class MyTask extends TimerTask {
    @Override
    public void run() {

    System.out.println("娃哈哈");
    if(Test4.test4 == null){
    Test4.test4 = new Test4();
    Test4.test4.dodo();
    }
    }
    }
    }
    //以下是test4import java.util.Timer;
    import java.util.TimerTask;public class Test4 {
    public static Test4 test4 = null;
    public static Test4 getTest4(){
    return test4;
    }
    public void dodo() {
    Timer t2 = new Timer();
    t2.schedule(new MyJob(), 0, 1000);
    } class MyJob extends TimerTask { @Override
    public void run() {
    System.out.println("==========================");
    } }
    }
      

  4.   

    import java.util.Timer;
    import java.util.TimerTask;public class Test3 {
    public static void main(String[] args) {
    Timer t1 = new Timer();
    t1.schedule(new MyTask(), 0, 5*1000);
    }static class MyTask extends TimerTask {
    Test4 test4 = new Test4();
    @Override
    public void run() {
    test4.cancel();
    System.out.println("娃哈哈");
    test4.dodo();
    }
      }
    }import java.util.Timer;
    import java.util.TimerTask;
    public class Test4 {
    Timer t2 = new Timer();
    MyJob mj = new MyJob();public void dodo(){
    mj = new MyJob();
    t2.schedule(mj, 0, 1000);
    }
    public void cancel()
    {
     mj.cancel();
    }
    class MyJob extends TimerTask{@Override
    public void run() {
    System.out.println("==========================");
    }}
    }