目前,我们正在使用Hazelcast 3.1.5。 我有一个应该提供跨多个JVM节点线程安全的一个简单的分布式锁定机制。 代码非常简单。
private static HazelcastInstance hInst = getHazelcastInstance();
private IMap<String, Integer> mapOfLocks = null;
...
...
mapOfLocks = hInst.getMap("mapOfLocks");
if (mapOfLocks.get(name) == null) {
mapOfLocks.put(name,1);
mapOfLocks.lock(name);
}
else {
mapOfLocks.put(name,mapOfLocks.get(name)+1);
}
...
<STUFF HAPPENS HERE>
mapOfLocks.unlock(name);
..
}
此前,我曾经直接调用HazelcastInstance.getLock()和东西似乎工作,但我们从来没有看到任何东西出来的地方,当多个JVM参与。 最近,我被要求调查在块数据库死锁和调查周后和日志分析,我能确定这是由多个线程能够获得对相同的密钥锁引起的。 之前的第一个线程可以提交代码,第二个线程设法得到另一把锁,此时第二个线程从第一线程数据库锁阻塞。
何乐而不为Hazelcast实现分布式锁的任何悬而未决的错误,我应该用不同的配置我做什么? 而且,启用噢,我的配置已经播禁用TCP-IP