PriorityQueue に関する同様の質問を見つけました。そのエラーは、正しく初期化されていないというものでした。私は同じ問題を抱えているかもしれませんが、正しく初期化する方法がわかりません!
今のところ、私はただやっています:
BlockingQueue myQueue = null;
しかし、リストに何かを追加しようとするとすぐに例外がスローされます。
BlockingQueue を正しく初期化するにはどうすればよいですか?
PriorityQueue に関する同様の質問を見つけました。そのエラーは、正しく初期化されていないというものでした。私は同じ問題を抱えているかもしれませんが、正しく初期化する方法がわかりません!
今のところ、私はただやっています:
BlockingQueue myQueue = null;
しかし、リストに何かを追加しようとするとすぐに例外がスローされます。
BlockingQueue を正しく初期化するにはどうすればよいですか?
BlockingQueue<E>
インターフェースです。など、そのインターフェイスの特定の実装を選択し、そのコンストラクターの 1 つを次のようArrayBlockingQueue<E>
に呼び出す必要があります。
BlockingQueue<E> myQueue = new ArrayBlockingQueue<E>(20);
JDK に存在するさまざまな種類のブロッキング キューがわからない場合は、「すべての既知の実装クラス」を参照してください。
例もあるjavadocsを読んでください http://download.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html
BlockingQueue blocksQueue = new ArrayBlockingQueue(100); // 他の実装もあります。特に、リンクされたリストを使用し、配列よりも優れたスケーリングを行います。
null でメソッドを呼び出すと、null ポインター例外が発生します。インターフェイスを実装する新しい ArrayBlockingQueue を作成してみてください。
BlockingQueue
たとえばBlockingQueue<String>
、または類似のものなど、特定のタイプを保持します。BlockingQueue
たとえば、の実装で変数を初期化する必要がありますArrayBlockingQueue<E>
。したがって、次のようにします。
BlockingQueue<MyObject> = new ArrayBlockingQueue<MyObject>();
あなたは大丈夫です。