我需要一个java调度器,它与其他调度器共享一个线程池

我需要一个java调度器,它与其他调度器共享一个线程池,java,scheduling,Java,Scheduling,我已经堆积了好几个星期,试图找到解决这个问题的办法。 我一次又一次地回到同一个世界。 Java的ScheduledThreadPoolExecutor 选择。。。但没有什么能做到这一点 我想要的是在调度程序中同步/串行地执行作业,让许多调度程序彼此独立地执行,并由一个线程池支持 我有一个java服务器应用程序,我需要的是创建成百上千的调度器 我希望每个计划程序都能连续执行其作业并同步 所有调度程序都可以同时独立运行,但我还需要通过使用线程池(不是每个调度程序使用线程池,而是所有调度程序使用一个线

我已经堆积了好几个星期,试图找到解决这个问题的办法。 我一次又一次地回到同一个世界。 Java的ScheduledThreadPoolExecutor 选择。。。但没有什么能做到这一点

我想要的是在调度程序中同步/串行地执行作业,让许多调度程序彼此独立地执行,并由一个线程池支持

我有一个java服务器应用程序,我需要的是创建成百上千的调度器

我希望每个计划程序都能连续执行其作业并同步

所有调度程序都可以同时独立运行,但我还需要通过使用线程池(不是每个调度程序使用线程池,而是所有调度程序使用一个线程池!)来限制所有调度程序的线程数。 此外,暂停/恢复工作并将其放入组中的能力也将非常强大。
有什么解决办法吗?提前谢谢

如果希望作业在ScheduledThreadPoolExecutor中串行执行,只需创建一个聚合作业,该作业以串行方式执行每个实际作业,并将其提交给ScheduledThreadPoolExecutor。虽然如果您需要同时运行数千个调度程序,但仍然限制了线程的数量,您可能会遇到麻烦-至少如果作业执行时间太长,因此您的调度开始出现问题


我想说,你应该看看如何处理这个问题,因为它会处理日程安排和作业的大部分血淋淋的细节。

我自己也在试图找到这样的解决方案。在.Net世界中,系统提供了一个集中共享的线程池,它可以动态地扩展和收缩。我的情况是,我有很多低频维护类型的工作,一个线程应该能够处理它们

我想您可以在某个地方有一个单例执行器(线程池版本),并始终使用它来调度任务。这将模仿.Net的行为

您是否考虑过使用和大量串行队列?
听起来,它可以通过一个简单的API执行您想要的操作。我一直想自己试试。据我所知,Akka项目使用它

可能有一个单独的调度器,比如可以满足您的需要吗?

dhtmlx调度器对我来说是可行的,但这项工作与他自己与db的连接在一起,这里是源代码和示例以及他的java连接器www.dhtmlx.com/x/download/regular/dhtmlxConnector_v09_java.zip

您需要的是许多调度器和一个执行器。调度器不应该自己执行任务,而是将任务提交给执行器。调度器可以实现为
java.util.Timer
任务。

您可以使用线程库。它提供了一个libdispatch样式的api。 对于您的用例,您将为需要串行执行的每一组任务创建一个串行队列。然后安排要在其上执行的任务。例如:

DispachQueue q1 = createQueue();
DispachQueue q2 = createQueue();
...
DispachQueue qN = createQueue();

Runnable task = ...
qN.execute(task)  
// or to execute in the future
qN.dispatchAfter(1, TimeUnit.SECOND, task)

所有队列都使用一个共享线程池。

Hello nos!谢谢你的回答。我对您建议使用ScheduledThreadPoolExecutor和聚合作业的解决方案感兴趣。这是我有时在想的事情,但我对实施有一些严重的问题。1.如何创建包含延迟实际作业的聚合作业?2.这个聚合作业如何执行它们中的每一项。。。每次在实际作业列表中循环以查看需要执行哪个作业?3.这是不够的吗?如何将其提交(聚合作业)给ScheduledThreadPoolExecutor?使用延迟?还是不?谢谢!)1.通过聚合作业,我想到的是一系列连续运行的作业,一个接一个。听起来你有一系列的工作有不同的延迟-你真的需要这些“串行”执行吗?2.不要那样做。3.如果你想让作业在一定的延迟后执行,请使用延迟,否则不要。首先请原谅我的英语。1.我所说的串行执行是指任务之间的同步执行。我不希望我的实际工作同时执行。2.问题是怎么做。如果不是在任务列表中循环,那么如何?3.好的,关于这个;)实际上,我想说的是“Akka”。Quartz的开销比大多数线程池/调度程序高得多,所以我认为这不合适。为什么需要这么多调度程序?事实上,你为什么会遇到不止一个?很多工作是的,但是很多调度员?为什么?更多的细节会很有用。或者至少是指向java.util.Timer的链接