java - ConcurrentLinkedQueue#poll() 会阻塞吗?

标签 java concurrency

我的线程永远运行并在 ConcurrentLinkedQueue#peek() 之后调用 ConcurrentLinkedQueue#poll()。

但在某些情况下,线程似乎挂起。我知道这有点含糊 但是人们可以为我确认方法 poll() 或 peek() 将 NEVER 阻止。谢谢。

最佳答案

据我所知,ConcurrentLinkedQueue是一个“无等待”的实现。

所以我必须假设每次对 poll()peek() 的独立调用都将从不阻塞

此集合上的原子操作是同步的,并且保证对队列的每个单独调用都是线程安全的。

一定是你的代码有问题。例如,如果您这样做:

Object obj;

if (queue.peek() != null)
   obj = queue.poll()

不保证 obj 不会为 null

关于java - ConcurrentLinkedQueue#poll() 会阻塞吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/564903/

相关文章:

java - 如何阻塞直到 BlockingQueue 为空?

java - Fork 和 Join 特性 jdk7 线程数

java - 我可以使用 native 编译作为 Java 混淆吗

java - 来自第三方 API 的模拟调用和响应

java - 将自定义 jar 添加到 Maven 本地存储库

java - executorService 接口(interface)的 ShutdownNow 不会关闭正在进行的任务

java - 如何命令线程完成并使用 join()

java - 如何在 Java 中以编程方式更改 logback 日志级别?

JAVA的 future 是运行?

scala - 线程安全地变换可变映射中的值