我的业务逻辑是这样的,写了一个测试连接服务器的类,里面有一个测试是否可以连接服务器的方法,
要求每隔5分钟ping一次服务器,如果连续ping三次不通,则触发一个发出警报的方法。
假设我已将写了一个测试能否ping通服务器的类TextPing,它的一个方法canReach是一个返回能否ping通的boolean值。
如果ping不通,则计数器couter记为1,如果接着第二次ping不通,couter记为2,如果接着第三次ping不通,则couter记为3,并且设置canlong为false,因为canlong为false
,这样就触发了警报方法,但是如果couter为2或为1的情况下再连续ping一次通的话,就要设置couter为0了,假设发出警报的方法我已经写好了,但是被卡住了,大家可以帮忙吗?
我的代码如下(省略相关import),
public class TestTimeTask extends TimerTask{
private boolean canLogin=true;//如果canLogin的值为false,则触发报警方法,所以初始化设为true;
private boolean canPing=true;//是否能够ping通服务器的返回值
private int couter=0;//如果ping不通,则计数器加1
private TextPing failHandle=new TextPing();//假设这个类我已经写好了,这个是测试ping服务器的类
public void run() {
canPing=failHandle.canReach();//测试是否能够ping通服务器
if(!canLogin)//如果ping不通,计数器加1;但是在连续的三次ping中,又一个ping通的话,计数器couter=0,如何实现???
couter++;
} }
要求每隔5分钟ping一次服务器,如果连续ping三次不通,则触发一个发出警报的方法。
假设我已将写了一个测试能否ping通服务器的类TextPing,它的一个方法canReach是一个返回能否ping通的boolean值。
如果ping不通,则计数器couter记为1,如果接着第二次ping不通,couter记为2,如果接着第三次ping不通,则couter记为3,并且设置canlong为false,因为canlong为false
,这样就触发了警报方法,但是如果couter为2或为1的情况下再连续ping一次通的话,就要设置couter为0了,假设发出警报的方法我已经写好了,但是被卡住了,大家可以帮忙吗?
我的代码如下(省略相关import),
public class TestTimeTask extends TimerTask{
private boolean canLogin=true;//如果canLogin的值为false,则触发报警方法,所以初始化设为true;
private boolean canPing=true;//是否能够ping通服务器的返回值
private int couter=0;//如果ping不通,则计数器加1
private TextPing failHandle=new TextPing();//假设这个类我已经写好了,这个是测试ping服务器的类
public void run() {
canPing=failHandle.canReach();//测试是否能够ping通服务器
if(!canLogin)//如果ping不通,计数器加1;但是在连续的三次ping中,又一个ping通的话,计数器couter=0,如何实现???
couter++;
} }
public void run() {
canPing = failHandle.canReach();
if (canPing) {
counter = 0;
} else {
if (++counter >= 3) {
canLogin = false;
}
}
}
private TextPing failHandle = new TextPing(); public void run() {
if (!failHandle.canReach()) {
if (counter == 2) {
// 第三次ping不通->报警
} else {
counter++;// 未达到3次加1
}
} else {
counter = 0;
}
}}
其实也可以利用TimerTaskimport java.util.*;public class StandThread extends Thread
{
private AtTimeTask task;
private Timer time=new Timer();
public StandThread()
{
}
public void run()
{
//Timer time=new Timer();
task=new AtTimeTask();
time.schedule(task,new Date(),3000);
}
}
而在AtTimeTask里则有一个public void run()方法,则是你要执行的业务!
{ private boolean canLogin = true; //如果canLogin的值为false,则触发报警方法,所以初始化设为true; private boolean canPing = true; //是否能够ping通服务器的返回值 private int couter = 0; //如果ping不通,则计数器加1 //private TextPing failHandle = new TextPing(); //假设这个类我已经写好了,这个是测试ping服务器的类 public void run()
{
for (int i = 0; i < 3; i++)
{
try
{
//canPing = failHandle.canReach();//测试是否能够ping通服务器
}
catch (Exception e)
{
//异常..
}
if (canPing)
{
//ping通了,couter计数归0
couter = 0;
break;
}
else
{
//累计
couter++;
}
}
if (couter == 3)
{
//3次没ping通,报警..
canLogin = false;
//do someting.......?
} } public static void main(String[] args)
{
//在程序初始化的时候定时,找个地方放就可以
TestTimeTask task = new TestTimeTask();
Timer testTimer = new Timer("TestPingTimer");
// 5分钟
testTimer.schedule(task, new Date(), (long) (5 * 60 * 1000));
}}
这个类是在JDK1.3就封装了进去的…………其实很简单的…………
还有开源包quartz
private boolean canLogin=true;//如果canLogin的值为false,则触发报警方法,所以初始化设为true;
private boolean canPing=true;//是否能够ping通服务器的返回值
private int couter=0;//如果ping不通,则计数器加1
private TextPing failHandle=new TextPing();//假设这个类我已经写好了,这个是测试ping服务器的类
public void run() {
canPing=failHandle.canReach();//测试是否能够ping通服务器
if(!canPing)
couter++;
else
couter=0; if(couter==3){
canLogin=false;
doyourFunction()....
}
}