【发布时间】:2018-05-11 02:07:57
【问题描述】:
我正在寻找像 AtomicInteger 或 LongAddr 这样的东西:
- 如果值小于
MAX,则递增,其中MAX是某个用户定义的值。 - 返回一个值,指示原子是否增加。
用例:
- 我有一个任务队列。
- 只有
MAX任务应该同时运行。 - 当一个新任务添加到队列中时,如果正在进行的任务数少于
MAX,我想运行它
我不能使用AtomicInteger 或LongAddr 的原因是它们只允许您与特定值而不是值范围进行比较。
澄清:我不希望解决方案实际执行任务。我的用例涉及将网络请求传递给 Jetty。它使用单个线程来驱动多个网络请求。任何触发Executor 的解决方案都无法达到此目的,因为这样我最终会为每个网络请求提供一个线程。
【问题讨论】:
-
你可以使用 LinkedBlockingQueue 之类的东西来限制可以添加到队列中的项目数
-
@user7 我不想限制可以添加到队列中的项目数。我想将所有内容都排队,但一次只运行
MAX任务。 -
我不太明白你的用例。如果已经有 MAX-1 个活动任务,你会怎么做?
-
工作完成后你会减少计数器吗?
-
@user7 是的。这就是计划。