首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 用JAVA实现定时执行任务怎么写?(jdk1.4) [已结贴,结贴人:renwangxing]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 16:51:47 楼主
    我的业务逻辑是这样的,写了一个测试连接服务器的类,里面有一个测试是否可以连接服务器的方法,
    要求每隔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),
    Java code
    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++; }


    }
    200  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 17:09:111楼 得分:30
    Java code
    public void run() { canPing = failHandle.canReach(); if (canPing) { counter = 0; } else { if (++counter >= 3) { canLogin = false; } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fastunit
    • 等级:
    发表于:2008-05-15 17:10:502楼 得分:20
    给个参考:
    Java code
    public class TestTimerTask extends TimerTask { private int counter = 0; private TextPing failHandle = new TextPing(); public void run() { if (!failHandle.canReach()) { if (counter == 2) { // 第三次ping不通->报警 } else { counter++;// 未达到3次加1 } } else { counter = 0; } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 22:56:283楼 得分:10
    引用 2 楼 fastunit 的回复:
    给个参考:

    Java code
    public class TestTimerTask extends TimerTask {

      private int counter = 0;
      private TextPing failHandle = new TextPing();

      public void run() {
        if (!failHandle.canReach()) {
          if (counter == 2) {
            // 第三次ping不通->报警
          } else {
            counter++;// 未达到3次加1
          }
        } else {
          counter = 0;
        }
      }

    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 00:49:344楼 得分:10
    LZ可以送10分技术分给我吗?急用`谢谢啦`好心有好报!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 01:19:255楼 得分:10
    引用 1 楼 cyberpeng 的回复:
    Java code
        public void run() {
            canPing = failHandle.canReach();
            if (canPing) {
                counter = 0;
            } else {
                if (++counter >= 3) {
                    canLogin = false;
                }
            }
        }



      高手!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 08:05:456楼 得分:10
    顶一下!
    偶也遇到过这样的问题.
    向楼上各位大侠门学习了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • M_song
    • 等级:
    发表于:2008-05-16 08:11:577楼 得分:20
    一楼正解!
    其实也可以利用TimerTask

    import 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()方法,则是你要执行的业务!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 08:29:228楼 得分:30
    如果我没有理解错需求的话。。

    Java code
    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() { 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)); } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 09:08:189楼 得分:10
    引用 1 楼 cyberpeng 的回复:
    Java code
        public void run() {
            canPing = failHandle.canReach();
            if (canPing) {
                counter = 0;
            } else {
                if (++counter >= 3) {
                    canLogin = false;
                }
            }
        }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 09:16:4910楼 得分:10
    恩…………如果是1.4的JDK的话,定时任务可以用到java.util.timer这个类…………具体使用方法你可以看API…………
    这个类是在JDK1.3就封装了进去的…………其实很简单的…………
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ilrxx
    • 等级:
    发表于:2008-05-16 09:19:1911楼 得分:10
    4楼为什么在哪都要10分技术分?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • waitgod
    • 等级:
    发表于:2008-05-16 09:21:1312楼 得分:10
    oo
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 09:30:1713楼 得分:10
    jdk自己有Timer
    还有开源包quartz
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 09:45:3414楼 得分:10
    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(!canPing)
                couter++;
            else
                couter=0;

            if(couter==3){
                canLogin=false;
                doyourFunction()....
            }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 12:00:3915楼 得分:0
    哇,都是高手啊,谢谢了,还有其他任务呢,目前采用一楼的方法
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved