java顺序任务_关于java:ExecutorService,它顺序执行任务,但从池中获取线程

文章探讨了如何实现一个名为SequentialPooledExecutor的ExecutorService,要求同一实例上的任务顺序执行,同时利用有限的线程池。作者在寻找现成的实现未果后,讨论了多种设计方案,包括使用单线程ExecutorService、哈希策略分配任务、以及考虑任务阻塞和资源管理的情况。最后,提出了一种基于LinkedBlockingQueue和AtomicBoolean的简化实现方案。
摘要由CSDN通过智能技术生成

我正在尝试使用以下属性构建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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值