首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JAVA 定时模式大总结

2012-09-14 
JAVA 定时方式大总结JAVA 定时方式大总结?除了Quartz之外,JAVA的定时方式总结如下几种:方式一:java.util.T

JAVA 定时方式大总结

JAVA 定时方式大总结

?

除了Quartz之外,JAVA的定时方式总结如下几种:

方式一:java.util.Timer?


java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks。?
一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类的方式创建。?

一个完整的Timer:?

Java代码??JAVA 定时模式大总结
  1. java.util.Timer?timer?=?new?java.util.Timer(true);???
  2. //?true?说明这个timer以daemon方式运行(优先级低,???
  3. //?程序结束timer也自动结束),注意,javax.swing???
  4. //?包中也有一个Timer类,如果import中用到swing包,???
  5. //?要注意名字的冲突。???
  6. ??
  7. TimerTask?task?=?new?TimerTask()?{???
  8. public?void?run()?{???
  9. ...?//每次需要执行的代码放到这里面。???
  10. }???
  11. };???
  12. ??
  13. //以下是几种调度task的方法:???
  14. ??
  15. timer.schedule(task,?time);???
  16. //?time为Date类型:在指定时间执行一次。???
  17. ??
  18. timer.schedule(task,?firstTime,?period);???
  19. //?firstTime为Date类型,period为long???
  20. //?从firstTime时刻开始,每隔period毫秒执行一次。???
  21. ??
  22. timer.schedule(task,?delay)???
  23. //?delay?为long类型:从现在起过delay毫秒执行一次???
  24. ??
  25. timer.schedule(task,?delay,?period)???
  26. //?delay为long,period为long:从现在起过delay毫秒以后,每隔period???
  27. //?毫秒执行一次。??


???
????

下面是一个完整的例子,由两个类组成,一个定制任务,一个调用java.util.Timer?

定制任务:?

Java代码??JAVA 定时模式大总结
  1. import?java.util.Timer;??
  2. ??
  3. public?class?TimerTaskTest?extends?java.util.TimerTask{??
  4. ??
  5. @Override??
  6. public?void?run()?{??
  7. ???//?TODO?Auto-generated?method?stub??
  8. ???System.out.println("start");??
  9. }??
  10. }??


2.调用java.util.Timer?

Java代码??JAVA 定时模式大总结
  1. import?java.util.Timer;??
  2. ??
  3. public?class?Test?{??
  4. public?static?void?main(String[]?args){??
  5. ???Timer?timer?=?new?Timer();??
  6. ???timer.schedule(new?TimerTaskTest(),?1000,?2000);??
  7. }??
  8. }??


根据上面的介绍,便可以在1秒后,每隔2秒执行一次程序

?

方式二:


?

ScheduledThreadPoolExecutor scheduledExecutor = new ScheduledThreadPoolExecutor(poolSize);

scheduledExecutor.scheduleAtFixedRate(myTask, initialDelay, run_period, TimeUnit.MINUTES);

myTask是一个实现Runnable接口的线程类。

imports:

import java.util.concurrent.ScheduledThreadPoolExecutor;

import java.util.concurrent.TimeUnit;


方式三:


?

Runnable task = new DelegatingErrorHandlingRunnable(this,TaskUtils.LOG_AND_SUPPRESS_ERROR_HANDLER);


ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(new ThreadFactoryBuilder().setNameFormat(

"JdkExecutorJob-%1$d").build());


//scheduleAtFixedRatefixRate() 固定任务两次启动之间的时间间隔.

//scheduleAtFixedDelay() ? ? ?固定任务结束后到下一次启动间的时间间隔.

scheduledExecutorService.scheduleAtFixedRate(task, initialDelay, period, TimeUnit.SECONDS);

imports:

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.TimeUnit;

import com.google.common.util.concurrent.ThreadFactoryBuilder;

?

?

热点排行