Мой код болен; то, что выглядит как довольно простая операция записи и чтения объекта, кажется, никогда не запускает свои вторичные операции. Поток внутреннего класса на удаленном узле отправляет ConcurrentHashMap
через OOS.
Когда это приходит — и это происходит, все в порядке — принимающий код продолжает в цикле, определяемом булевыми значениями, прослушивать OIS для обновлений этого CCHM. Эти обновления поступают от братьев и сестер того, кто отправил исходный CCHM (на каждый принимающий узел приходится один обслуживающий брат). ObjectOutputStreams
, которые используют эти братья и сестры, взяты из видимых HashMap
братьев и сестер. Братьям и сестрам все равно, отправляют ли они новому члену группы или существующему. Разница в том, является ли одноранговый узел новым или существующим, известна только на принимающей одноранговой стороне, где исходный CCHM получен и используется, а затем код продолжает ожидать обновлений в той же OIS. Информация о новых присоединяющихся одноранговых узлах добавляется в Hashtable
удаленного, поэтому отправляемый CCHM становится на один элемент больше каждый раз, когда он отправляется всем одноранговым узлам (новый плюс n существующих).
Но существующие одноранговые узлы не получают обновленный CCHM. Вместо того, чтобы заполнить мой код вызовами System.out.println()
или грубо остановить его, какие подводные камни я, вероятно, упустил из виду, чтобы попасть в эту неразбериху?