猿问

Java计时器与ExecutorService?

Java计时器与ExecutorService?

我有一些代码,在这些代码中,我使用java.util.timer..我环顾四周,发现ExecutorService也能做到。所以这个问题,你用计时器和ExecutorService要安排任务,一个人比另一个人有什么好处?

还想检查是否有人使用过Timer类中遇到的任何问题。ExecutorService为他们解决了。


倚天杖
浏览 479回答 3
3回答

ITMISS

根据Java并发在实践中的应用:Timer对系统时钟的变化很敏感,ScheduledThreadPoolExecutor不是。Timer只有一个执行线程,所以长时间运行的任务会延迟其他任务.ScheduledThreadPoolExecutor可以配置任意数量的线程。此外,如果需要,您可以完全控制创建的线程(通过提供ThreadFactory).抛出运行时异常TimerTask切断一条线,从而使Timer死了:-(.也就是说,计划的任务将不再运行。ScheduledThreadExecutor不仅捕获运行时异常,而且它允许您在需要时(通过重写)处理它们。afterExecute法ThreadPoolExecutor)。抛出异常的任务将被取消,但其他任务将继续运行。如果你能用ScheduledThreadExecutor而不是Timer,这样做。还有一件事.。当ScheduledThreadExecutor在Java1.4库中不可用,有一个JSR 166的后端(java.util.concurrent)到Java 1.2、1.3、1.4,它具有ScheduledThreadExecutor班级,等级。

慕容森

如果你可以得到,那就很难想出原因不使用Java 5执行器框架。呼叫:ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();会给你一个ScheduledExecutorService具有类似的功能Timer(也就是说,它将是单线程的),但其访问可能稍微更具可伸缩性(在遮罩下,它使用并发结构,而不是像使用Timer(全班)。使用ScheduledExecutorService还提供了一些优势,例如:如果需要,可以自定义它(请参阅newScheduledThreadPoolExecutor()或者ScheduledThreadPoolExecutor(班级)“一次性”执行可以返回结果关于坚持的唯一原因Timer我能想到的是:它是可用的预Java 5J2ME中提供了类似的类,这可以使您的应用程序更容易移植(但在本例中添加公共抽象层并不是非常困难)。

函数式编程

ExecutorService更新,更通用。计时器只是一个线程,它定期运行您为其计划的内容。ExecutorService可能是一个线程池,甚至可以分布在集群中的其他系统上,执行诸如一次性批处理执行等.只要看看每个人提出的决定就行了。
随时随地看视频慕课网APP

相关分类

Java
我要回答