私のコードは病気です。かなり単純なオブジェクトの書き込みおよび読み取り操作のように見えますが、その二次操作を起動することはありません。リモート ピアの内部クラス スレッドはConcurrentHashMap
、OOS を介して を送信します。
それが到着すると、受信コードはブール値で決定されたループで、その CCHM の更新を OIS でリッスンし続けます。これらの更新は、元の CCHM を送信した兄弟から送信されます (受信ピアごとに 1 つのサービス提供兄弟が存在します)。これらObjectOutputStreams
の兄弟が使用するものHashMap
は、兄弟の表示から取得されます。兄弟は、グループの新しいメンバーに送信するか、既存のメンバーに送信するかは気にしません。ピアが新規か既存かの違いは、元の CCHM が受信されて使用される受信ピア側でのみ認識され、コードは同じ OIS で更新を待ち続けます。参加する新しいピアの詳細は、リモートのHashtable
したがって、送信される CCHM は、すべてのピア (新しいものと既存の n 個) に送信されるたびに 1 要素大きくなります。
ただし、既存のピアは更新された CCHM を受信しません。コードを呼び出しでいっぱいにしSystem.out.println()
たり、大まかに停止したりするのではなく、この混乱の中で見落としがちな落とし穴は何ですか?