为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

wswzh0329 2016-03-15 18:03:26
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); }}
查看完整描述

1 回答

已采纳
?
luckIsAttitude

TA贡献11条经验 获得超9个赞

你把task 定义为static就行了   static  TimerTask task = new TimerTask(); 后面的new TimerDemo().task 都替换为task

static修饰后的成员,在编译时由内存分配一块内存空间,直到程序停止运行才会释放,那么就是说该类的所有对象都会共享这块内存空间

代码:

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);

    }

}

查看完整回答
2 反对 回复 2016-03-16
  • 1 回答
  • 0 关注
  • 2032 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信