【发布时间】:2019-07-18 10:58:28
【问题描述】:
我正在使用LinkedBlokingQueue,它在 2 个线程之间共享。从第一个线程构造函数我已将Queue 对象传递给第二个线程。
我在第一个线程中使用likedBlockingQueue.put。
第二个线程使用likedBlockingQueue.size()>0 和likedBlockingQueue.peek() 获取元素。
问题出在我的环境中,有时第二个线程为空,尽管我可以看到第一个线程在 put 处处于阻塞调用(因为我已将队列大小初始化为 1)。这个问题并不总是发生,但有时只会复制。根据 java 文档,无法理解导致此问题的原因,此队列似乎是线程安全的。有人可以就此分享任何观点吗?
我尝试复制这个,但只发生了几次,其他时候我可以从队列中获取元素。
1 个主题:
private final Queue<T> linkedQ = new LinkedBlokingQueue(1);
linkedQ.put(element);
2 线程:
while(condition)
{
if(this.linkedQ.size>0)
{
Object a = this.linkedQ.peek();
linkedQ.remove();
break;
}
}
没有错误,出现这个问题的时候调试,第二个线程中的Q显示为空。
【问题讨论】:
标签: java multithreading queue blocking