我必须将使用旧版本的hazelcast的应用升级到其中一个较新版本。有一些淡褐色锁定功能已被弃用并从API中完全删除。特别是,旧的锁功能如下:
Hazecast.getLock(myString);
getLock函数是Hazelcast上的静态方法。现在它将被替换为:
hazelcastInstance.getLock(myString);
...锁来自群集中的一个实例。
我的问题是,我可以使用hazelcast群集中的任何一个实例获取锁定吗?如果是这样,这会锁定所有实例吗?
答案 0 :(得分:4)
Q1:是的,您可以使用hazelcast群集中的任何一个实例来获取锁定(ILock
)。
您可以将hazelcast框架中的ILock
视为java.util.concurrent.locks.Lock
的分布式实施。有关详细信息,请参阅
http://docs.hazelcast.org/docs/3.5/javadoc/com/hazelcast/core/ILock.html
Q2:如果使用ILock
锁定临界区,则保证临界区在给定时间点仅由整个群集中的一个线程执行。因此,一旦节点中的lock()
调用Thread1
方法,其他线程(也在其他节点中)将等待锁定被释放。
示例代码:
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
Lock testLock = hazelcastInstance.getLock( "testLock" );
testLock.lock();
try
{
// critical section code.
}
finally
{
testLock.unlock();
}