0

我有两个程序都在集群上运行。我的问题是,当两个程序同时启动时,共享对象上的同步存在问题。如果我同时启动两个程序,他们几乎看不到其他人在该对象上的工作。

例如,

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
7f653993-cd63-4246-946a-e7a1441fa474994 解锁 14

c11399ec-8242-4e80-b9e9-0f43a050590c 1485417348313 锁
c11399ec-8242-4e80-b9e9-0f43a050590c 大小 = 1
c11399ec-8242-4e80-b9e9-0f4354174 1解锁

每次调试时,我确信在开始和结束锁定之间只有一个节点,并且在点 1 大小将被正确打印。但是,当我在点 1 同时运行两个节点时,每个节点都会打印 "size = 1" 。似乎第二个节点不知道地图的最新状态。

我怎样才能确定每个节点都会在地图上看到最近的信息。我用过 Jgroups,它也有类似的问题。

任何帮助将不胜感激,

谢谢

4

0 回答 0