0

2 つのプログラムがあり、両方ともクラスターで実行されています。私の問題は、2 つのプログラムが同時に開始されると、共有オブジェクトの同期に関する問題があることです。2 つのプログラムを同時に起動すると、そのオブジェクトに対する他のプログラムの作業をほとんど見ることができなくなります。

例えば、

HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
IMap<Object,Object> lockMap = instance.getMap("someMap");

// start lock
lockMap.lock("someLock");
System.out.println("nodeId="+nodeId+" "+System.currentTimeMillis()+" lock ");

// put entry to the map
lockMap.put(nodeId,"value");

//  point 1
int size=lockMap.size();
System.out.println("nodeId="+nodeId+" size = "+size);

// end lock

System.out.println("nodeId="+nodeId+" "+System.currentTimeMillis()+" unlock ");
lockMap.unlock("someLock");

出力は次のとおりです。

7f653993-cd63-4246-946a-e7a141fa477e 1485417274993 ロック 7f653993- cd63-4246-946a
-e7a141fa477e サイズ = 1

c11399ec-8242-4e80-b9e9-0f43a050590c 1485417348313 ロック c11399ec- 8242-4e80
-b9e9-0f43a050590c サイズ = 1

毎回デバッグするとき、開始ロックと終了ロックの間にノードが1つしかなく、その時点で1つのサイズが適切に出力されると確信しています。ただし、ポイント 1 で 2 つのノードを同時に実行すると、各ノードは "size = 1" を出力します。2 番目のノードはマップの最新の状態を認識していないようです。

すべてのノードがマップ上の最新情報を確認できるようにするにはどうすればよいですか? 私はJgroupsを使用しましたが、同様の問題があります。

どんな助けでも大歓迎です、

ありがとう

4

0 に答える 0