1

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

您是否认为为 A 和 B 类型的 ScheduledThreadPoolExecutor 的两个实例专门使用它们自己的线程池是谨慎的做法?您认为这种方法有什么问题吗?

4

1 回答 1

1

不,这似乎是合理的。我正在做类似的事情,即我需要根据某些 id 以串行方式执行任务,例如,用于 id="1" 的组件的所有任务都需要彼此串行执行,并与所有其他任务并行执行具有不同 ID 的组件。所以基本上我需要为每个不同的组件建立一个单独的任务队列,这些任务是从每个特定队列中一个接一个地拉出来的。为了实现这一点,我使用

Executors.newSingleThreadExecutor(new JobThreadFactory(componentId));

对于每个组件。此外,我需要 ExecutorService 来处理未绑定到 componentIds 的不同类型的任务,为此我创建了额外的 ExecutorService 实例

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

这至少适用于我的情况。我能想到的唯一问题是否需要有序执行任务,即任务 2 需要在任务 1 之后执行,依此类推……但我怀疑这里的情况……

于 2012-01-12T10:16:15.753 回答