PriorityQueue
FIFO 要素を並べ替えるには、 a を使用する必要があります。キューには Message オブジェクトが含まれ、各オブジェクトには と、そのメッセージに対して受信した確認応答の数を追跡する がありますdouble timestamp
。int counter
メッセージには、データを含むものと確認を含むものの 2 種類があります。データを含むメッセージのみがキューに入れられます。キューをソートするために使用されるコンパレータを作成しています。すべての承認を受信した場合にのみ、キューの先頭のみをポップします。
問題は、確認メッセージが着信したときに、この確認を受信したメッセージの確認カウンターをインクリメントする必要があることです。このためには、キュー内の各メッセージの特定のフィールド (送信時間) をチェックして、メッセージを見つける必要があります。
これはどのように行うことができますか?私は次のことを考えました:
イテレータを取得してから、各オブジェクトの特定のフィールドをチェックするキューを反復処理します。
これは私には残忍な方法のように思えます。もっと良い方法はありますか?このようなキュー内のオブジェクトにアクセスできますか?
注: 実装している機能 (Lamport の論理クロックを使用する分散システムで順序付けされたマルチキャストの合計) には順序付けられたキューが必要なため、PriorityQueue を使用する必要があります。キューの先頭にあるメッセージは、各ノードから承認されないとアプリケーション スレッドに配信できません。また、すべての確認応答を受信した場合でも、キューの先頭にないメッセージを配信することはできません。