2

我发现了一个关于 PriorityQueue 的类似问题,那个错误是它没有正确初始化。我可能有同样的问题,但我不知道如何正确初始化它!

截至目前,我只是这样做:

阻塞队列 myQueue = null;

但是,一旦我尝试将某些内容添加到列表中,就会引发异常。

如何正确初始化 BlockingQueue?

4

4 回答 4

3

BlockingQueue<E>是一个接口。您需要选择该接口的特定实现,例如ArrayBlockingQueue<E>,并调用其构造函数之一,如下所示:

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

如果您不确定 JDK 中存在哪些不同类型的阻塞队列,请查看“所有已知的实现类”

于 2011-09-22T17:21:39.317 回答
1

如果您在 null 上调用任何方法,您将得到一个空指针异常。尝试制作一个新的 ArrayBlockingQueue,它实现了该接口。

于 2011-09-22T17:21:08.233 回答
1

请阅读也有示例 http://download.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html的 javadocs

BlockingQueue 阻塞队列 = new ArrayBlockingQueue(100); // 还有其他实现,特别是使用链表并且比数组更好地扩展。

于 2011-09-22T17:22:05.473 回答
0
  1. 保持某种类型,BlockingQueue例如BlockingQueue<String>或类似的东西。
  2. BlockingQueue例如,您需要使用 的实现来初始化变量ArrayBlockingQueue<E>

所以做类似的事情:

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

你会没事的。

于 2011-09-22T17:52:17.333 回答