我想要销毁掉能否有办法再启用?
或者说暂时停掉,需要的时候在启用。求大侠们帮帮忙
 Timer timer = new Timer("Timer-reconnect provider Timer");
 TimerTask task = new TimerTask() {
@Override
public void run() {
log.info("it is time to check jtapi Provider.");
try {
checkProvider();
} catch (Exception e) {
log.info("the Network may be disconnected,please check!");
e.printStackTrace();
}
}
}
在provider INSERVICE的時候关了
在provider OUTOFSERVICE的時候开启
在provider SHUTDOWN的時候关开启我下面这样写就不行 @Override
public void providerInService(ProviderEvent event) {
log.info("provider is InService.");
                timer.cancel(); } @Override
public void providerOutOfService(ProviderEvent event) {
log.info("provider is OutOfService,please wait for InService.");
                timer.schedule(task, 3000, 10000); } @Override
public void providerShutdown(ProviderEvent event) {
log.info("provider is Shutdown,please wait for restart.");
                timer.schedule(task, 3000, 10000);
}

解决方案 »

  1.   

    我用的 Quartz定时器 好像比较好理解.
      

  2.   

    就说调用了cancel方法,对象被销毁掉了~再执行就异常了
    不管是timer还是task调用了cancel方法,都是直接销毁掉的,所以后面用的直接异常。我的目的是,在服务状态的时候不启用timer在outofserver要启用timer,
    在shutdown也要启用timer
    (上面两种状态只能用一个schedule)
      

  3.   

    Quartz这个木有用过。模块都快写好了,不怎么想改啊。
    现在的策略是一启动就10000中check一次,不管是什么状态,然后我闲日志出出现太多check了,想优化一下
      

  4.   


    就说调用了cancel方法,对象被销毁掉了~再执行就异常了
    不管是timer还是task调用了cancel方法,都是直接销毁掉的,所以后面用的直接异常。我的目的是,在服务状态的时候不启用timer在outofserver要启用timer,
    在shutdown也要启用timer
    (上面两种状态只能用一个schedule)
      

  5.   

        TimerTask task=null;
        @Override
        public void providerInService(ProviderEvent event) {
            log.info("provider is InService.");
            task.cancel();
        }    @Override
        public void providerOutOfService(ProviderEvent event) {
            log.info("provider is OutOfService,please wait for InService.");
            task = new TimerTask() {
                @Override
                public void run() {
                    log.info("it is time to check jtapi Provider.");
                    try {
                        checkProvider();
                    } catch (Exception e) {
                        log.info("the Network may be disconnected,please check!");
                        e.printStackTrace();
                    }
                }
            }
            timer.schedule(task, 3000, 10000);
        }    @Override
        public void providerShutdown(ProviderEvent event) {
            log.info("provider is Shutdown,please wait for restart.");
            task = new TimerTask() {
                @Override
                public void run() {
                    log.info("it is time to check jtapi Provider.");
                    try {
                        checkProvider();
                    } catch (Exception e) {
                        log.info("the Network may be disconnected,please check!");
                        e.printStackTrace();
                    }
                }
            }
            timer.schedule(task, 3000, 10000);
        }
      

  6.   

    每次cancel task,然后重新启动的时候,重新new一个task加入schedule