在单个线程中安排多个任务

时间:2011-06-06 16:14:14

标签: java scheduled-tasks timertask

我希望让单个线程负责以不同的时间间隔安排的多个任务。我想从调度程序中添加和删除任务。是否有任何图书馆可以帮助我解决这个问题。如果不是,我将自己编码,只是不想重新发明轮子。

对于后台我想向我的应用程序添加警报,从单个线程控制,其中应用程序的其余部分可以添加/删除计划任务。我可以使用多个TimerTask或编写我自己的单线程调度程序,但如果有更好的选项,我不想忽略它。

詹姆斯

3 个答案:

答案 0 :(得分:4)

如果你需要在JDK 1.5或更高版本中开箱即用的东西,你看过ScheduledExecutorService吗?

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html

您可以使用此工厂方法创建其中一个,由单个线程支持:

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html#newSingleThreadScheduledExecutor()

还有一个替代工厂方法接受ThreadFactory作为参数。这使您有机会自定义将在ScheduledExecutorService内运行的Thread。例如,您可以调用Thread.setName为线程提供更有意义的名称。这对调试应用程序非常有用。生成完整的线程转储时,您将看到自定义名称附加到线程而不是JVM自动附加的通用名称。

根据需要,调用Thread.setDaemon(true)也可能是合适的,这样该线程就不会阻止JVM关闭。

此外,最好通过调用ExecutorService.shutdown或ExecutorService.shutdownNow来清理任何ExecutorService。如果没有保证的关闭调用(例如在finally块中),则可能会在应用程序中引入线程泄漏错误。根据您描述的用法,这听起来不太可能会让您感到困惑,但是当我向某人推荐使用ExecutorService时,我总是要强调这一点。从JavaDocs中很容易忽略这一点。

答案 1 :(得分:1)

如果您想要基本库,可以使用内置的ScheduledExecutorService。这允许添加重复任务并取消它们。您可以将其设置为单线程。

答案 2 :(得分:0)

结帐Quartz。它几乎是Java中任务调度的首选。如果您浏览文档,可以将其配置为单线程。

相关问题