上次的业务实现中,有同学给出建议用cancel取消发送警报的方法,但是用cancel会终止程序的运行,如何实现发送三条警报信息后不再发送但是程序
还是正常运行呢??上次的贴:
昨天问大家的一个类,现在又有新的业务需求了,我现在重新写了这个计划任务类,为方便大家解决,我把它写的简单一些吧(省略相关import) 
现在的业务需求是,TextPing测试能否ping通服务器,其返回值是一个boolean值。每隔5分钟ping一次服务器,如果连续三次返回值为false,则触发发送警报的方法sendmassege(),如果服务器一直出现故障,则开始时每隔5分钟发送一条警报,在连续发送三次警报之后,就停止发送警报sendmassege(),现在我测试的时候,当我假设服务器一直ping不通,它每隔五分钟就要发一条警报信息,一直没有停止,我要得效果是在发送三条警报信息后就不要发送了,怎么实现呢?我的代码如下,看看大家能否帮我完善??? public class MyTask extends TimerTask {
   private boolean canLogin=true;//如果canLogin的值为false,则触发报警方法,所以初始化设为true;
    private boolean canPing=true;//是否能够ping通服务器的返回值
    private int couter=0;//如果ping不通,则计数器加1
   private int sendcouter=0;//记录发送警报信息次数
    public void run() {     //run() 方法参考昨天cyberpeng 红魔菜 给出的代码
         canPing = canReach();//测试是否能够ping通服务器,这个方法已经写好了。         if (canPing) {
            counter = 0;//如果ping通,则重设计数器为0,
        } else {
            if (++counter >= 3) {
                canLogin = false;
               sendmassege();//(++counter >= 3)触发发送警报信息的方法,这个方法已经写好了。
               sendcouter++;//发送一次信息,增加1;
               while(sendcouter>3)//如果发送信息三次以后,就不执行发送信息了
                      cancel();  //用cancel方法的话就会退出这个run方法,即程序不再执行了,其实业务需要的是连续发送三条警报信息后
      停止发送信息,但是程序还在运行的,不能用cancel(),怎么办????            }
        }
public static void main(String[] args) {
               Timer task=new Timer();
               long delay=2000;//程序在两秒中后执行
               long frequncy=1000*60*5;//每隔5分钟运行一次
            task.schedule(new MyTask(),delay ,frequncy);
}
}

解决方案 »

  1.   

    "在发送三条警报信息后就不要发送了"
        public void run() {
            canPing = canReach();
            if (canPing) {
                counter = 0;// 如果ping通,则重设计数器为0,
            } else {
                if (++counter >= 3) {
                    sendcouter++;
                    canLogin = false;
                    if (sendcounter >= 3) {
                        sendmassege();
                    }
                }
            }
        }
    用一个if不就行了?
    用cancel会将这个timertask从timer的任务队列里彻底移除,不会再被执行到。
      

  2.   

    sorry,写错了应该是if (sendcounter < 3) {
        sendmassege();
    }