运行ScheduledThreadPoolExecutor的两个实例

时间:2012-01-12 03:03:08

标签: scheduled-tasks executorservice instances

我有许多并行运行的异步任务。所有任务可以分为两种类型,让我们调用一种 - 类型A(这是耗时的),其他所有类型都是B类(执行速度更快,更快)。 使用带有x poolsize的单个ScheduledThreadPoolExecutor,最终在某些时候所有线程都忙于执行类型A,因为结果类型B被阻塞并延迟。 我想要完成的是运行与B类并行的A类任务,我希望这两种类型的任务在其组内并行运行以提高性能。

您是否认为谨慎地为类型A和B创建两个ScheduledThreadPoolExecutor实例并且只使用自己的线程池?你觉得这种方法有什么问题吗?

1 个答案:

答案 0 :(得分:1)

不,这似乎是合理的。 我正在做类似的事情,即我需要以串行方式执行任务,具体取决于一些id,例如对于具有id =“1”的组件的所有任务需要彼此串行执行,并且与用于具有不同id的组件的所有其他任务并行执行。 所以基本上我需要为每个不同的组件分别设置一个任务队列,从每个特定的队列中逐个拉出任务。 为了实现我使用

Executors.newSingleThreadExecutor(new JobThreadFactory(componentId));

每个组件。 另外,我需要ExecutorService用于不绑定到componentIds的不同类型的任务,因为我创建了额外的ExecutorService实例

Executors.newFixedThreadPool(DEFAULT_THREAD_POOL_SIZE, new JobThreadFactory());

这至少适用于我的情况。 如果需要有序执行任务,我能想到的唯一问题,即 task2需要在task1之后执行,依此类推......但我怀疑这个案例......