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