4

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

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

詹姆士

4

3 回答 3

5

如果您需要 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.setName 给线程一个更有意义的名称。这对于调试应用程序非常有帮助。当您生成完整的线程转储时,您将看到附加到线程的自定义名称,而不是 JVM 自动附加的通用名称。

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

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

于 2011-06-06T16:28:16.383 回答
1

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

于 2011-06-06T16:26:48.603 回答
0

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

于 2011-06-06T16:20:02.233 回答