(一)java代码中定时调用的三种方法:

方法一:使用thread
创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。代码如下:

    1. public static void main(String[] args) {  
    2. timeInterval = 1000;  
    3. runnable = new Runnable() {  
    4.         public void run() {  
    5.             while (true) {  
    6.                 System.out.println("方法一:循环调用 !!  时间=" + new Date() );  
    7.                 try {  
    8.                     Thread.sleep(timeInterval);  
    9.                 } catch (InterruptedException e) {  
    10.                     e.printStackTrace();  
    11.                 }  
    12.             }  
    13.         }  
    14.     };  
    15. thread = new Thread(runnable);  
    16.     thread.start();  
    17. }


    方法二:在实现时,Timer类可以调度任务,TimerTask则是通过在run()方法里实现具体任务。 Timer实例可以调度多任务,它是线程安全的。
    当Timer的构造器被调用时,它创建了一个线程,这个线程可以用来调度任务。 

    详解Timer地址,可查看调用时间       

    下面是简单代码:

    1. public static void main(String[] args) {  
    2. task = new TimerTask() {  
    3.         @Override  
    4.         public void run() {  
    5.             System.out.println("方法二:Timer定时调用 !!!  时间=" + new Date() );  
    6.         }  
    7.     };  
    8. timer = new Timer();  
    9. delay = 10000;  
    10. intevalPeriod = 1 * 1000;  
    11.     timer.scheduleAtFixedRate(task, delay, intevalPeriod);  
    12. }


    方法三:ScheduledExecutorService是从Java SE5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。ScheduledThreadPoolExecutor可以说是Timer的多线程实现版本,连JDK官方都推荐使用。

    可以参考查看  

    下面是简单代码:

    1. public static void main(String[] args) {  
    2. runnable = new Runnable() {  
    3.         public void run() {  
    4.             System.out.println("方法三:ScheduledExecutorService定时调用 !!  时间=" + new Date() );  
    5.         }  
    6.     };  
    7. service = Executors.newSingleThreadScheduledExecutor();  
    8.     // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间  
    9.     service.scheduleAtFixedRate(runnable, 5, 3, TimeUnit.SECONDS);  
    10. }


    (二)java代码定时调用在spring中的例子:(下面代码为固定几分钟调用一次,百度文库定时调用http://wenku.baidu.com/view/a8ac2b71a8114431b80dd809.html)

    编写类TimerManager:

    1. public class TimerManager {  
    2.      public TimerManager() {  
    3. task = new NFDFlightDataTimerTask();  
    4. service = Executors.newSingleThreadScheduledExecutor();  
    5.         // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间  
    6.         service.scheduleAtFixedRate(task, 5, 3, TimeUnit.SECONDS);  
    7.      }  
    8. }
    1. public class NFDFlightDataTimerTask extends TimerTask{  
    2. log = Logger.getLogger(NFDFlightDataTimerTask.class);  
    3.      @Override  
    4.      public void run() {  
    5.           try {  
    6.               //在这里写你要执行的内容  
    7.               System.out.println("执行定时调用 !!  时间=" + new Date() );  
    8.           } catch (Exception e) {  
    9.               log.info("-------------解析信息发生异常--------------");  
    10.           }  
    11.      }  
    12. }


    编写类NFDFlightDataTaskListener:


      1. public class NFDFlightDataTaskListener implements ServletContextListener {  
      2.      public void contextInitialized(ServletContextEvent event) {  
      3.           new TimerManager();  
      4.      }  
      5.      public void contextDestroyed(ServletContextEvent event) {  
      6.      }  
      7. }


      web.xml

      1.     <listener>  
      2. <listener-class>com.cxy.timer.NFDFlightDataTaskListener</listener-class>  
      3. </listener>