我在IBM JVM 1.6上得到了这个 NPE :
java.lang. 在 java.util.concurrent.ConcurrentLinkedQueue.size(ConcurrentLinkedQueue.java:315) 的java.util.concurrent.ConcurrentLinkedQueue.first( ConcurrentLinkedQueue .java: 274 ) 处出现NullPointerException 。. .
相关资料显示第 274 行抛出了一个空的“ head ”成员。搜索用法显示此成员根据需要设置为新的 node(),但永远不会被取消。
怎么可能?我错过了什么?
...在调试模式下我无法重现这一点。这个队列是从多个线程访问的。
片段(Sun&IBM 来源相同,只是注释稍微改变了行号):
Node<E> first() {
for (;;) {
Node<E> h = head;
Node<E> t = tail;
Node<E> first = h.getNext(); // line #274 on IBM, #263 on Sun
...
}
}