我有以下代码:

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始终返回零大小,尽管队列中包含元素。

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

最佳答案

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

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

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

07-25 22:22