准备用Java的Timer,让其在每个小时的整点运行一个任务.由于是个新手,哪位大侠能否给个列子

解决方案 »

  1.   

    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++));
        }  }
    }
      

  2.   

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

  3.   

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

  4.   

    我后来是通过这种方法来做的,不知道行不行(给我一个确认答复也给分):
    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);
      

  5.   

    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().
      

  6.   

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

  7.   

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

  8.   

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

  9.   

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

  10.   

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

  11.   

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

  12.   

    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秒执行一次了,呵呵
    谢谢冷血动物
      

  13.   

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

  14.   

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

  15.   

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

  16.   

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