我发现了一个关于 PriorityQueue 的类似问题,那个错误是它没有正确初始化。我可能有同样的问题,但我不知道如何正确初始化它!
截至目前,我只是这样做:
阻塞队列 myQueue = null;
但是,一旦我尝试将某些内容添加到列表中,就会引发异常。
如何正确初始化 BlockingQueue?
我发现了一个关于 PriorityQueue 的类似问题,那个错误是它没有正确初始化。我可能有同样的问题,但我不知道如何正确初始化它!
截至目前,我只是这样做:
阻塞队列 myQueue = null;
但是,一旦我尝试将某些内容添加到列表中,就会引发异常。
如何正确初始化 BlockingQueue?
BlockingQueue<E>
是一个接口。您需要选择该接口的特定实现,例如ArrayBlockingQueue<E>
,并调用其构造函数之一,如下所示:
BlockingQueue<E> myQueue = new ArrayBlockingQueue<E>(20);
如果您不确定 JDK 中存在哪些不同类型的阻塞队列,请查看“所有已知的实现类”。
如果您在 null 上调用任何方法,您将得到一个空指针异常。尝试制作一个新的 ArrayBlockingQueue,它实现了该接口。
请阅读也有示例 http://download.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html的 javadocs
BlockingQueue 阻塞队列 = new ArrayBlockingQueue(100); // 还有其他实现,特别是使用链表并且比数组更好地扩展。
BlockingQueue
例如BlockingQueue<String>
或类似的东西。BlockingQueue
例如,您需要使用 的实现来初始化变量ArrayBlockingQueue<E>
。所以做类似的事情:
BlockingQueue<MyObject> = new ArrayBlockingQueue<MyObject>();
你会没事的。