1

我有一个生产者-消费者的情况,我有一个需要定期轮询新任务消息的远程ExecutorService消息队列和一个执行任务的本地。有许多这样的任务执行器轮询 MQ。本地执行器将具有固定数量的线程和相对固定的吞吐量。

但问题是我不希望主消息循环在无法处理远程消息时继续使用它们,但如果有更多工作要做,我希望它能够持续工作。我想为每个线程至少准备一个任务,但不要太多,以免饿死其他工作人员。

经典的生产者-消费者。问题是ExecutorService抽象出一些我需要知道的信息(总线程数、繁忙线程数等)。实际线程数是在启动时创建相应的ExecutorService. 然后将其与远程消息队列的抽象一起注入到我的主工作循环中。

我觉得我错过了一些明显的东西。目前,我倾向于使用装饰器模式ExecutorService来跟踪计数。我很好奇是否有更优雅的解决方案可以使用?

4

1 回答 1

2

如果您使用ThreadPoolExecutor的实现,ExecutorService那么您将可以访问ExecutorService(例如getActiveCount()getTaskCount())中缺少的所需信息

于 2013-07-16T17:39:10.233 回答