繁体   English   中英

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

[英]Schedule multiple tasks in a single thread

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

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

詹姆士

如果您需要 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 中很容易忽略这一点。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM