ヘッドからアイテムを抽出し、その優先度を更新して、このような非ブロッキングアプローチでキューに戻すルーチンを実装しました(AtomicReferenceを使用)
def head(): Entry = {
def takeAndUpdate(e: Entry, success: Boolean): Entry = {
if (success) {
return e
}
val oldQueue = queueReference.get()
val newQueue = oldQueue.clone()
val item = newQueue.dequeue().increase()
newQueue += item
takeAndUpdate(item.e, queueReference.compareAndSet(oldQueue, newQueue))
}
takeAndUpdate(null, false)
}
次に、キュー内の任意のエントリを見つけて、優先度を変更し、キューに戻す必要があります。PriorityQueueはこれをサポートしていないようですが、目的の動作を実現するためにどのクラスを使用する必要がありますか?
優先キュー内のアイテムの優先度の変更に関連しています