Java Timer与ExecutorService?
我有使用计划任务的代码java.util.Timer
。我环顾四周,发现ExecutorService
可以做到这一点。因此,这里有一个问题,你是否使用过Timer
并ExecutorService
安排了任务,一次使用比另一次使用有什么好处?
还想检查是否有人使用过该Timer
课程并遇到任何ExecutorService
为他们解决的问题。
回答:
根据实践中的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
类。
以上是 Java Timer与ExecutorService? 的全部内容, 来源链接: utcz.com/qa/402914.html