从其他线程检查时,ConcurrentLinkedQueue大小返回零

时间:2012-08-28 21:38:39

标签: java multithreading

我有以下代码:

Queue<Message> localMsgQueue;
//inside the constructor
localMsgQueue = new ConcurrentLinkedQueue<Message>();

public void AddMsg(Message m)
{
    localMsgQueue.offer(m);     
    System.out.println("^^"+localMsgQueue.size());

}
public void GetMsg() {
    System.out.println("+++" + localMsgQueue.size());       
}

这里,在初始化队列的主线程内调用AddMsg。 GetMsg是不时从不同的线程调用的。

我的问题是内部大小检查AddMsg返回队列中正确数量的元素,而GetMsg总是返回ZERO大小,尽管队列包含元素。

有人能指出这里的问题是什么吗?这是我第一次使用Java并发队列,因此不确定发生了什么。

1 个答案:

答案 0 :(得分:3)

您可能正在构建两个不同的ConcurrentLinkedQueue<Message>对象。

在类的构造函数中放置一个断点,看看它被击中的次数。

// put a breakpoint here
localMsgQueue = new ConcurrentLinkedQueue<Message>();