【发布时间】:2021-05-02 16:57:42
【问题描述】:
我有一个线程应该在新对象添加到集合时执行一些操作。此集合由几个 Callables 修改。等待新元素的线程应该在一段时间后通过布尔标志“停止”轻松停止。
实现它的可能方法是什么?我没有找到实现它的好例子。
【问题讨论】:
-
您在寻找(阻塞)队列吗?
-
是的,这是可能的解决方案,但我不想使用 while(运行 || !queue.isEmpty())创建无限循环。所以现在,我想回顾一下其他选项。
-
但你不使用
queue.isEmpty()与阻塞队列。 -
@TestName 我只是好奇“无限循环”有什么问题?带有 .take() 的 BlockingQueue + 无限循环 + 带有 interrupt() 方法的线程中断(而不是自定义的 volatile 标志)是管理像您这样的案例的规范方法。还有其他特定的东西,例如 Disruptor 等,但它们满足非常特定的要求,例如无 GC、低延迟等。
标签: java multithreading collections concurrency