我的线程永远运行并在 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/