根据实践中的Java并发性:
Timer
对系统时钟的变化很敏感,ScheduledThreadPoolExecutor
不是。Timer
只有一个执行线程,因此长时间运行的任务可能会延迟其他任务。ScheduledThreadPoolExecutor
可以配置任意数量的线程。此外,你可以根据需要完全控制创建的线程(通过提供ThreadFactory
)。- 抛出的运行时异常会TimerTask杀死一个线程,从而导致Timer死机:-( …即已调度的任务将不再运行。
ScheduledThreadExecutor
不仅捕获运行时异常,而且还允许你根据需要处理它们(通过覆盖afterExecute
方法ThreadPoolExecutor
)。抛出异常将被取消,但其他任务将继续运行。
如果可以
ScheduledThreadExecutor代替使用Timer,请这样做。
还有一件事…虽然
ScheduledThreadExecutorJava 1.4库中没有该功能,但是有一个将JSR 166(
java.util.concurrent)反向移植到Java 1.2、1.3、1.4的
ScheduledThreadExecutor类。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)