昨天问大家的一个类,现在又有新的业务需求了,我现在重新写了这个计划任务类,为方便大家解决,我把它写的简单一些吧(省略相关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)//如果发送信息三次以后,就不执行发送信息了
break; }
}
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);
}
}
现在的业务需求是,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)//如果发送信息三次以后,就不执行发送信息了
break; }
}
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);
}
}
怎么判定服务器一直出现故障呢?
break;试试这样: if(sendcouter>3)
cancel();//取消此计时器任务
根据计数器couter计算啊,如果ping不通,如果++couter>3,那么就一直出现故障啊,只要有一次ping通,couter就为0了。
if (++counter >= 3) {
canLogin = false;
sendmassege();//(++counter >= 3)触发发送警报信息的方法,这个方法已经写好了。
sendcouter++;//发送一次信息,增加1;
while(sendcouter>3)//如果发送信息三次以后,就不执行发送信息了
break; }
用过time和timertask,感激不尽!