请问Java里有没有类可以做到,最好能给出代码参考,谢谢

解决方案 »

  1.   

    SysContextListener.java
     
    package axtic.servlet;
     
    import java.util.Timer;//定时器类
    import axtic.bean.exportHistoryBean;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    public class SysContextListener implements ServletContextListener
    {
      private Timer timer = null;
      public void contextInitialized(ServletContextEvent event)
      {//在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能
          timer = new Timer(true);
          event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到
          timer.schedule(new exportHistoryBean(event.getServletContext()),0,5*1000);//调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时。
          event.getServletContext().log("已经添加任务");
      }
      public void contextDestroyed(ServletContextEvent event)
      {//在这里关闭监听器,所以在这里销毁定时器。
          timer.cancel();
          event.getServletContext().log("定时器销毁");
      }
    }
     
     
    接下来可以编写自己的功能类,此类一定要extends定时器类中TimerTask
    exportHistoryBean.java
     
    package axtic.bean;
     
    import java.util.Calendar;
    import java.util.TimerTask;
    import javax.servlet.ServletContext;
    public class exportHistoryBean extends TimerTask
    {
      private static final int C_SCHEDULE_HOUR = 0;
      private static boolean isRunning = false;
      private ServletContext context = null; 
      public exportHistoryBean(ServletContext context)
      {
          this.context = context; 
      }
     
      public void run()
      {
        Calendar c = Calendar.getInstance();
        if(!isRunning)
        {
          if(C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY))
          {
            isRunning = true;
            context.log("开始执行指定任务");
            //-------------------开始保存当日历史记录
           
           
           
            //在这里编写自己的功能,例:
            //File file = new File("temp");
            //file.mkdir();
            //启动tomcat,可以发现在tomcat根目录下,会自动创建temp文件夹        //-------------------结束
            isRunning = false;
            context.log("指定任务执行结束");
          }
          else
          {
            context.log("上一次任务执行还未结束");
          }
        }
      }
    }
      

  2.   

    Timer time=new Timer();
        TimerTask task = new TimerTask() {
        public void run() {
        System.out.println("Hi");
        }
        };
        time.schedule(task,1000,2000);
      

  3.   

    Timer time = new Timer();
        //设置定时执行程序
        TimerTask task = new TimerTask() {
          public void run() {
            System.out.println("Hi");
          }
        };
        //开始时间从当前时间第二天凌晨两点开始
        java.util.Date start=new Date();
        start.setDate(start.getDate()+1);
        start.setHours(2);
        start.setMinutes(0);
        start.setSeconds(0);
        System.out.println(start.toLocaleString());
        //时间间隔一天
        long period=60*60*24*1000;
        time.schedule(task, start, period);
      

  4.   

    线程呵呵
    一直Thead.sleep();到两点
    当时间到是interrupt线程