さて、これまで「解決策」を見つけたので、ここに一般的な考えを投稿します。
java.util.Map
インターフェイスを実装するクラスを作成しました。このクラスを呼び出しましょう。DMPublisher<K, V>
一方、K
はキータイプでありV
、マップ内の値のタイプです。
マップインターフェイスを実装する別のクラスがありますDMSubscriber<K, V>
。
パブリッシャークラスは、明示的に閉じられるまでソケットのリッスンを開始します。サブスクライバーは、作成時にこのソケットに接続します。
パブリッシャークラスには、キャッシュとして使用される実際のハッシュマップの属性があります。パブリッシャーのすべての操作方法について、キャッシュ内の対応するアイテムがそれに応じて変更されます。更新は、上記のソケットを介してすべてのサブスクライバーに送信されるようになりました。
マップインターフェイスのほかに、サブスクライバーはオブザーバーパターンリスナーを使用することもできます。ソケットから受信したすべての更新が、これらすべてのリスナーにディスパッチされるようになりました。
接続時に、パブリッシャーは、一貫した状態を維持するために、現在キャッシュに保持されているすべてのデータをサブスクライバーに送信します。
マルチスレッドをサポートするために、両方のクラスが同期されます。
ソースコードに興味のある方は、お気軽にご連絡ください。