Scala 2.9.2 キューを操作しているときに、まれに NoSuchElementException エラーが発生します。キューに要素が含まれているため、例外がわかりません。SynchronizedQueue に切り替えようとしましたが、これは同時実行の問題 (私のキューは別のスレッドから書き込まれ、読み取られます) であると考えていましたが、解決しませんでした。
削減されたコードは次のようになります。
val window = new scala.collection.mutable.Queue[Packet]
...
(thread 1)
window += packet
...
(thread 2)
window.dequeueAll(someFunction)
println(window.size)
window.foreach(println(_))
その結果、
32
java.util.NoSuchElementException
at scala.collection.mutable.LinkedListLike$class.head(LinkedListLike.scala:76)
at scala.collection.mutable.LinkedList.head(LinkedList.scala:78)
at scala.collection.mutable.MutableList.head(MutableList.scala:53)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.mutable.MutableList.foreach(MutableList.scala:30)
LinkedListLike.head() のドキュメントは言う
Exceptions thrown
`NoSuchElementException`
if the linked list is empty.
しかし、キューが空でない場合、どのようにこの例外をスローできますか?