帮我看看这个定时器的代码 为什么不能停止?感谢大神!

package day09;


import java.util.Timer;

import java.util.TimerTask;


//定时器演示

public class TimerDemo extends Timer{

    //第一个定时任务---定义在main方法外,用task引用来指向该匿名类实例对象

TimerTask task = new TimerTask(){


@Override

public void run() {

// TODO Auto-generated method stub

System.out.println("my task run");

}

};

public static void main(String[] args) {

//定时器

Timer timer = new Timer();

//将定时任务交给定时器时回调执行

timer.schedule(new TimerDemo().task, 1000,1000);

//第二个任务,还是用之前的task引用来指向该匿名类实例对象

new TimerDemo().task = new TimerTask(){


@Override

public void run() {

// TODO Auto-generated method stub

timer.cancel();

}

                };

//十秒后停止

timer.schedule(new TimerDemo().task, 10000);

}

}


wswzh0329
浏览 2039回答 1
1回答

luckIsAttitude

你把task 定义为static就行了   static  TimerTask task = new TimerTask(); 后面的new TimerDemo().task 都替换为taskstatic修饰后的成员,在编译时由内存分配一块内存空间,直到程序停止运行才会释放,那么就是说该类的所有对象都会共享这块内存空间代码:package day09;import java.util.Timer;import java.util.TimerTask;//定时器演示public class TimerDemo extends Timer {    // 第一个定时任务---定义在main方法外,用task引用来指向该匿名类实例对象    static TimerTask task = new TimerTask() {        @Override        public void run() {            // TODO Auto-generated method stub            System.out.println("my task run");        }    };    public static void main(String[] args) {        // 定时器        final Timer timer = new Timer();        // 将定时任务交给定时器时回调执行        timer.schedule(task, 1000, 1000);        // 第二个任务,还是用之前的task引用来指向该匿名类实例对象        task = new TimerTask() {            @Override            public void run() {                // TODO Auto-generated method stub                timer.cancel();            }        };        // 十秒后停止        timer.schedule(task, 10000);    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java