上次的业务实现中,有同学给出建议用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);
}
}
还是正常运行呢??上次的贴:
昨天问大家的一个类,现在又有新的业务需求了,我现在重新写了这个计划任务类,为方便大家解决,我把它写的简单一些吧(省略相关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);
}
}
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的任务队列里彻底移除,不会再被执行到。
sendmassege();
}