我正在尝试使用以下属性构建ExecutorService的实现,我们称之为SequentialPooledExecutor。
SequentialPooledExecutor的所有实例共享相同的线程池
在SequentialPooledExecutor的同一实例上的调用顺序执行。
换句话说,实例在开始处理其队列中的下一个任务之前,等待当前执行任务的终止。
我目前正在自己??实现SequentialPooledExecutor的过程中,但是我想知道我是否正在重新发明轮子。我研究了ExecutorService的不同实现,例如Executors类提供的实现,但是没有找到满足我要求的实现。
您知道我是否缺少现有的实现,还是应该自己继续实现接口?
编辑:
我认为我的要求不是很清楚,让我们看看是否可以用其他文字来解释。
假设我有一系列的会话,比如说1000个(我之前称为执行者实例的东西)。我可以向一个会话提交任务,并且我希望保证提交给同一会话的所有任务都按顺序执行。但是,属于不同会话的任务不应相互依赖。
我想定义一个执行这些任务的ExecutorService,但是使用有限数量的线程(比如说200),但是要确保在同一会话中的上一个任务完成之前不启动任务。
我不知道是否已有任何东西可以做到这一点,或者我是否应该自己实现这样的ExecutorService。
为什么需要一个线程池? 如果要顺序调用它们,则只需一个。 我想念什么?
@Erik看到下面的评论
您肯定需要一些自定义实现。 但是您的问题很有趣,您可能会写另一个问题,包括设计细节和遇到的任何问题。
现在有MoreExecutors.newSequentialExecutor()。
如果您有数千个必须顺序处理的密钥,但是您没有数千个核心,则可以使用哈希策略来分配工作
ExecutorService[] es = // many single threaded executors
public < T > Future< T > submit(String key, Callable< T > calls) {
int h = Math.abs(key.hashCode() % es.length);
return es[h].sub