我有一个生产者 - 消费者的情况,我有一个远程消息队列,需要定期轮询新任务消息和执行任务的本地ExecutorService
。有许多这些任务执行器轮询MQ。本地执行程序将具有固定数量的线程,具有相对固定的吞吐量。
问题是我不希望主消息循环只是继续消耗远程消息,如果它不能处理它们,但我希望它能够继续工作,如果还有更多的工作要做。我想为每个线程准备至少一个任务,但不要太多,以免让其他工作人员挨饿。
经典制片人 - 消费者。问题是ExecutorService
抽象出我需要知道的一些信息(总线程数,繁忙线程数等)。在创建相应的ExecutorService
时,会在启动时配置实际线程数。然后将其与远程消息队列的抽象一起注入到我的主工作循环中。
我觉得我错过了一些明显的东西。目前,我倾向于ExecutorService
周围的装饰图案来跟踪计数。我很好奇是否有一个更优雅的解决方案,任何使用过的?
答案 0 :(得分:2)
如果您使用ExecutorService
的{{3}}实施,那么您将可以访问ExecutorService
中缺少的所需信息(例如getActiveCount()
和{{ 1}})