ScheduledExecutorService:修改一个或多个正在运行的任务

时间:2016-01-28 13:53:04

标签: threadpool scheduledexecutorservice

我有一个程序,它从用户准备的文件中加载一些任务,并根据文件中显示的调度开始执行它们。

示例:taskFile.txt

Task1: run every hour
Task2: run every 2 seconds
...
TaskN: run every monday at 10:00

第一部分是好的,我使用ScheduledExecutorService解决了,我非常满意。任务按照应有的方式加载和运行。

现在,让用户通过GUI(在运行时)决定Task2应该每分钟运行一次,并且他想删除Task3。 我找不到任何方法访问池中的某个特定任务,以便删除/修改它。

所以我无法在运行时更新任务。当用户更改任务时,我只能修改taskFile.txt并重新启动应用程序,以便根据新更新的taskFile.txt重新加载所有任务。

您知道如何访问单个任务以修改/删除它吗?

或者甚至是一种删除一个给定任务的方法,因此我可以在池中插入一个新的,具有用户想要的修改。

由于

1 个答案:

答案 0 :(得分:0)

这不优雅,但有效。

假设你需要10个线程,有时你需要管理一个特定的线程。

而不是拥有一个包含10个线程的池,使用10个池,每个池有一个线程,将它们保存在您喜欢的数据结构中,并在您想要修改thread_1时对pool_1进行操作。 可以从池中删除旧的Runnable并添加一个包含所需更改的新Runnable。

另外,放入池中的任何内容都是匿名的,不能直接管理。

如果有人有更好的解决方案......