CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

如何实现在每小时的整点执行一个任务

楼主ygzeng()2006-04-29 11:27:49 在 Java / J2SE / 基础类 提问

准备用Java的Timer,让其在每个小时的整点运行一个任务.由于是个新手,哪位大侠能否给个列子 问题点数:100、回复次数:29Top

1 楼tawalisa()回复于 2006-04-29 11:48:40 得分 0

import   java.util.Timer;  
  import   java.util.TimerTask;  
   
  public   class   TimerTest   {  
       
      public   static   void   main(String[]   args)   {  
          test2   test   =   new   test2();  
          Timer   time   =   new   Timer();  
          time.scheduleAtFixedRate(test.new   RunTimer(),5000,200);  
          time.schedule(test.new   RunTimer(),5000,1000);  
      }  
   
      class   RunTimer   extends   TimerTask   {  
          int   i   =   0;  
          public   void   run()   {  
              System.out.println(""   +   (i++));  
          }  
   
      }  
  }  
  Top

2 楼ygzeng()回复于 2006-04-29 13:01:40 得分 0

5000代表delay的时间,如何确定delay5000毫秒之后就是整点呢?Top

3 楼xueyi0108(西紅柿炒自己^ǒ^)回复于 2006-04-29 13:02:17 得分 0

mark  
  Top

4 楼PoemCode(诗意代码)回复于 2006-04-29 13:04:33 得分 0

学习Top

5 楼yunqing1028(-_-)回复于 2006-04-29 13:04:53 得分 0

用quartz吧  
  你这个问题绝对是小菜Top

6 楼zclgod(春风化雷)回复于 2006-04-29 13:07:44 得分 0

多线程Top

7 楼ygzeng()回复于 2006-04-29 14:31:41 得分 0

我后来是通过这种方法来做的,不知道行不行(给我一个确认答复也给分):  
  Calendar   CurrentTime=Calendar.getInstance();  
  CurrentTime.set(Calendar.HOUR,0);  
  CurrentTime.set(Calendar.MINUTE,0);  
  CurrentTime.set(Calendar.MILLISECOND,0);  
  CurrentTime.add(Calendar.HOUR,1);  
  Date   NextHour=CurrentTime.getTime();  
  timer.schedule(new   RenameTask(),NextHour,JOB_INTERNAL);Top

8 楼hemiao_1993(冷血动物)回复于 2006-04-29 15:21:34 得分 0

import   java.util.Calendar;  
  import   java.util.Date;  
  import   java.util.Timer;  
   
  public   class   OneHour   {  
   
  private   final   static   long   JOB_INTERNAL   =   1000   *   60   *   60;  
   
  /**  
    *   @param   args  
    */  
  public   static   void   main(String[]   args)   {  
  //   TODO   Auto-generated   method   stub  
  Timer   timer   =   new   Timer();  
  //   timer.scheduleAtFixedRate(new   MyTask,   );  
   
  Calendar   currentTime   =   Calendar.getInstance();  
  currentTime.setTime(new   Date());  
   
  int   currentHour   =   currentTime.get(Calendar.HOUR);  
   
  currentTime.set(Calendar.HOUR,   currentHour   +   1);  
  currentTime.set(Calendar.MINUTE,   0);  
  currentTime.set(Calendar.SECOND,   0);  
  currentTime.set(Calendar.MILLISECOND,   0);  
   
  Date   NextHour   =   currentTime.getTime();  
  // System.out.println(NextHour);  
   
  timer.scheduleAtFixedRate(new   MyTask(),   NextHour,   JOB_INTERNAL);  
  }  
   
  }  
   
  import   java.util.Date;  
  import   java.util.TimerTask;  
   
   
  class   MyTask   extends   TimerTask   {  
   
  @Override  
  public   void   run()   {  
  //   TODO   Auto-generated   method   stub  
  System.out.println(new   Date());  
  }  
   
  }  
   
  这个应该差不多了,   还有不要用Schedule().Top

9 楼Actan(灌篮张飞)回复于 2006-04-29 16:31:57 得分 0

冷血动物:  
  我改成JOB_INTERNAL   =   2000;可以让它两秒钟执行一次吗?为什么我改了好像不行呢?  
  大致讲一下你的代码好吗?学习……谢谢Top

10 楼laughsmile(海边的星空)回复于 2006-04-29 16:50:06 得分 0

如果是windows,建议用计划任务Top

11 楼btb368()回复于 2006-04-29 17:10:08 得分 0

先MARK一下,嘿嘿Top

12 楼mazq024(mazq)回复于 2006-04-30 08:42:51 得分 0

linux、unix可以用cron设置定时任务Top

13 楼lovingpig(lovingpig)回复于 2006-04-30 08:50:51 得分 0

强烈支持quartzTop

14 楼mysohu( 21世纪最重要的就是我!:))回复于 2006-04-30 08:54:37 得分 0

MARK一下Top

15 楼Nowish(看我能忍耐多久)回复于 2006-04-30 09:13:09 得分 0

Twins~Top

16 楼UnAgain()回复于 2006-04-30 09:21:06 得分 0

markTop

17 楼hemiao_1993(冷血动物)回复于 2006-04-30 09:34:51 得分 0

冷血动物:  
  我改成JOB_INTERNAL   =   2000;可以让它两秒钟执行一次吗?为什么我改了好像不行呢?  
  大致讲一下你的代码好吗?学习……谢谢  
  ------------  
  肯定不行啦,   它第一次执行的时候会选下一个整点小时的时候.   说下大体思路:   先取当前时间,   比如说是12:30:45,321,   然后把这个时间的分秒微秒都设成0,   就变成了12:00:00,000,   在这个基础上再把小时数加1,   变成了13:00:00,000,   这个就是下一个整点小时的时间嘛.  
  具体细节看代码查帮助吧.Top

18 楼hemiao_1993(冷血动物)回复于 2006-04-30 09:36:26 得分 0

也就是说你改成了两秒,   它第一次执行还会选下一个整点的小时,   再往后就是每两秒执行一次了,   明白了吧.Top

19 楼UnAgain()回复于 2006-04-30 10:14:23 得分 0

同意hemiao_1993(冷血动物)的观点,不过要测试的话,时间可是够长的。   ^_^Top

20 楼hemiao_1993(冷血动物)回复于 2006-04-30 11:30:00 得分 0

同意hemiao_1993(冷血动物)的观点,不过要测试的话,时间可是够长的。   ^_^  
  -----------  
  测试的时候可以改成下一整点分钟开始执行,   哈哈.   不然要急死的.Top

21 楼zclgod(春风化雷)回复于 2006-04-30 11:46:05 得分 0

学习Top

22 楼qczl1224(倾情一世『qczl.ys168.com』)回复于 2006-04-30 14:09:34 得分 0

用数据库调度任务!Top

23 楼Actan(灌篮张飞)回复于 2006-04-30 15:11:13 得分 0

to   冷血动物和UnAgain()  
  明白了。我改了一下冷血动物的代码,可以立即执行了,(从当前算起)  
  private   final   static   long   JOB_INTERNAL   =   5000;  
  currentTime.set(Calendar.HOUR,   currentTime.get(Calendar.HOUR));  
  currentTime.set(Calendar.MINUTE,   currentTime.get(Calendar.MINUTE));  
  currentTime.set(Calendar.SECOND,   currentTime.get(Calendar.SECOND));  
  currentTime.set(Calendar.MILLISECOND,   currentTime.get(Calendar.MILLISECOND));  
  从现在起,5秒执行一次了,呵呵  
  谢谢冷血动物Top

24 楼ygzeng()回复于 2006-05-08 15:05:42 得分 0

谢谢<冷血动物>  
  还有一个问题,为什么不用Schedule,而是用scheduleAtFixedRate  
  比如:5点运行一个任务,5点10分完成,如果用schedule,下次运行时间应该是:6点,如果使用scheduleAtFixedRate应该是:6点10分啊?Top

25 楼ygzeng()回复于 2006-05-08 15:08:57 得分 0

另外,currentTime.set(Calendar.HOUR,   currentHour   +   1);的话,如果是24点,那么下次运行时间是什么时候了?会不会跑到25点,这样导致程序无法运行Top

26 楼xiachedan(瞎扯蛋)回复于 2006-05-09 17:13:15 得分 0

顶Top

27 楼JAVA_WEB(不停地往上爬)回复于 2006-08-23 14:05:39 得分 0

用Quartz!Top

28 楼xblue3(http://my.6cncn.cn)回复于 2006-08-23 14:21:44 得分 0

用一个线程获取当前时间了  
  用一个哈希表保持任务呵呵  
  让线程睡一个小时呵呵  
  thread.sleep();  
  你还可以interraput   sleep呵呵  
  呵呵结合图形界面可以设置sleep时间.....  
  多号呀  
  http://my.6cncn.cnTop

29 楼redv(Shutra)回复于 2006-08-23 15:22:59 得分 0

用Spring的Schedule,扩展性好,哈哈~Top

相关问题

关键词

得分解答快速导航

  • 帖主:ygzeng

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo