2

PriorityQueue に関する同様の質問を見つけました。そのエラーは、正しく初期化されていないというものでした。私は同じ問題を抱えているかもしれませんが、正しく初期化する方法がわかりません!

今のところ、私はただやっています:

BlockingQueue myQueue = null;

しかし、リストに何かを追加しようとするとすぐに例外がスローされます。

BlockingQueue を正しく初期化するにはどうすればよいですか?

4

4 に答える 4

3

BlockingQueue<E>インターフェースです。など、そのインターフェイスの特定の実装を選択し、そのコンストラクターの 1 つを次のようArrayBlockingQueue<E>に呼び出す必要があります。

BlockingQueue<E> myQueue = new ArrayBlockingQueue<E>(20);

JDK に存在するさまざまな種類のブロッキング キューがわからない場合は、「すべての既知の実装クラス」を参照してください。

于 2011-09-22T17:21:39.317 に答える
1

例もあるjavadocsを読んでください http://download.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html

BlockingQueue blocksQueue = new ArrayBlockingQueue(100); // 他の実装もあります。特に、リンクされたリストを使用し、配列よりも優れたスケーリングを行います。

于 2011-09-22T17:22:05.473 に答える
1

null でメソッドを呼び出すと、null ポインター例外が発生します。インターフェイスを実装する新しい ArrayBlockingQueue を作成してみてください。

于 2011-09-22T17:21:08.233 に答える
0
  1. BlockingQueueたとえばBlockingQueue<String>、または類似のものなど、特定のタイプを保持します。
  2. BlockingQueueたとえば、の実装で変数を初期化する必要がありますArrayBlockingQueue<E>

したがって、次のようにします。

BlockingQueue<MyObject> = new ArrayBlockingQueue<MyObject>();

あなたは大丈夫です。

于 2011-09-22T17:52:17.333 に答える