0

私は次のコードを持っています:

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並行キューを使用するのはこれが初めてなので、何が起こっているのかわかりません。

4

1 に答える 1

3

おそらく2つの異なるConcurrentLinkedQueue<Message>オブジェクトを作成しています。

クラスのコンストラクター内にブレークポイントを設定し、ヒットする回数を確認します。

// put a breakpoint here
localMsgQueue = new ConcurrentLinkedQueue<Message>();
于 2012-08-28T21:40:53.590 に答える