写了一个SERVERLET方法,必须在每个月的5号晚上8点执行这个方法,有没有方法做这个事情,谢谢高手解答。。很急,谢谢,解决问题马上结贴

解决方案 »

  1.   

    JAVA中的Timer和TimerTaskclass Worker extends TimerTask {
      public void run() {
        System.out.println("我在工作啦!");
      }
    }
    Date dateToExcute = ...
    java.util.Timer timer = new java.util.Timer(true);
    timer.schedule(new Worker, dateToExcute) ;
      

  2.   


    import java.util.TimerTask;public class Test {    public static void main(String[] args) throws Exception {        
            java.util.Timer timer = new java.util.Timer(true);
            timer.schedule(new Worker(), 1000,2000) ; //1秒后, 每隔2秒执行一次
            while(true){
              Thread.sleep(1000);
            }
        }
    }class Worker extends TimerTask {
      public void run() {
        System.out.println("我在工作啦!");
       // 这里面可以判断明确的日期,并设字新的schedule 日期
      }
    }
      

  3.   

    一个完成的代码。
    import java.util.Calendar;
    import java.util.Date;
    import java.util.TimerTask;public class Test {  public static void main(String[] args) throws Exception {
        java.util.Timer timer = new java.util.Timer(true);    while (true) { // 用于下一个循环
          finished = false;
          timer.schedule(new Worker(), getNextDate()); // 设置下一个执行日期
          while (!finished) { // 不能让应用停止啊!
            Thread.sleep(10000);
          }
        }
      }  static boolean finished = false;  private static Date getNextDate() {
        Calendar cal = Calendar.getInstance();
        if (cal.get(Calendar.DAY_OF_MONTH) > 5) { // 是否已经超过5号了
          cal.add(Calendar.MONTH, 1); // 只能下月了
        } else if (cal.get(Calendar.DAY_OF_MONTH) == 5) {// 正好5号
          if (cal.get(Calendar.HOUR_OF_DAY) > 20) { // 是否超过20点
            cal.add(Calendar.MONTH, 1); // 只能下月了
          }
        } else {
          cal.set(Calendar.DAY_OF_MONTH, 5);// 设置5号执行
        }
        cal.set(Calendar.HOUR_OF_DAY, 20); // 设置20:00
        return cal.getTime();
      }
    }class Worker extends TimerTask {
      public void run() {
        System.out.println("我在工作啦!");
        Test.finished = true;
      }
    }
      

  4.   

    http://tech.techweb.com.cn/redirect.php?tid=198593&goto=lastpost
    里面的quartz 好像不错,我没用过。
    有时间研究一下!
      

  5.   

    用quartz,可以完成你的要求。
      

  6.   

    我上学时,老师说JAVA是不能做即时性的软件的因为线程是被虚拟机调度的,什么时候调度谁也不知道.
      

  7.   

    用Quartz这个任务调度,就可以了
      

  8.   

    像这种指定时间的任务调度,采用Quartz的Cron表达式是最合适不过了。
    Quartz的使用也很简单只要实现一个Job接口中的一个方法,把需要执行
    的代码写到里面去,再把这个Job加到Scheduler中,在Trigger中用Cron
    指定一下,就可以运行了。具体的可以参考Quartz的官方教程:
    http://www.opensymphony.com/quartz/wikidocs/Tutorial.html
      

  9.   

    quartz的cron表达式: 0 0 20 5 * ?
    http://biaoming.javaeye.com/blog/395320 0 10,14,16 * * ? 每天上午10点,下午2点,4点
    0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时
    0 0 12 ? * WED 表示每个星期三中午12点 
    "0 0 12 * * ?" 每天中午12点触发 
    "0 15 10 ? * *" 每天上午10:15触发 
    "0 15 10 * * ?" 每天上午10:15触发 
    "0 15 10 * * ? *" 每天上午10:15触发 
    "0 15 10 * * ? 2005" 2005年的每天上午10:15触发 
    "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 
    "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 
    "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
    "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
    "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 
    "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 
    "0 15 10 15 * ?" 每月15日上午10:15触发 
    "0 15 10 L * ?" 每月最后一日的上午10:15触发 
    "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
    "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 
    "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
      

  10.   

    把方法写成一个单独的类,然后用操作系统的定制任务就可以了。
    在windows下可以在系统里定制一个任务
    如果是在AIX或linux下,直接用contrab