大きなコードの一部としてこのコード(Obfuscated)があり、行にNullPointerException
が表示されています。 isEmpty()
コールをチェックしただけで、このキューをポーリングするスレッドは他にありません。これはどのように可能ですか?他のスレッドがキューに追加されています。キューを永久に追加することは可能ですか?ArrayDequeは空ではありませんが、ポーリングメソッドの場合はnullを返します
ArrayDeque
のソースコードを読もうとしましたが、isEmpty()
のチェックとしてhead == tail
が使用されています。いくつかの奇妙な衝突が追加の間に可能ですかhead != tail
head
はnull
を指していますか? apiで述べたように
private final Queue<Task> active = new ArrayDeque<Task>();
if (!this.active.isEmpty()) {
SomeType object = null;
object = this.active.poll();
object.doSomething();
}
私は、OPが「head == tail」の単純なチェックが失敗する理由を知りたいと思っています。これは、ドキュメントの引用よりもここで必要な説明です。 –