如何使用榛子锁

use*_*636 1 locking hazelcast

我必须将使用旧版本的hazelcast的应用程序升级到最新版本之一。此后,不建议使用某些hazelcast锁定功能,并将其从API中完全删除。特别是,旧的锁定功能按以下方式工作:

Hazecast.getLock(myString);
Run Code Online (Sandbox Code Playgroud)

getLock函数是Hazelcast上的静态方法。现在将其替换为:

hazelcastInstance.getLock(myString);
Run Code Online (Sandbox Code Playgroud)

...该锁来自集群中的实例之一。

我的问题是,我可以使用hazelcast群集中的任何一个实例来获取锁吗?如果是这样,这会锁定所有实例吗?

Din*_*esh 5

问题1:是的,您可以使用hazelcast群集中的任何实例来获取锁(ILock)。

您可以将ILockhazelcast框架视为的分布式实现java.util.concurrent.locks.Lock。有关更多详细信息,请参见

http://docs.hazelcast.org/docs/3.5/javadoc/com/hazelcast/core/ILock.html

问题2:如果使用锁定关键部分ILock,则可以保证在给定的时间点,整个集群中只有一个线程可以执行受保护的关键部分。因此,一旦在节点中lock()Thread1了一个方法,其他线程(在其他节点中)也将等待,直到锁被释放。

样例代码:

HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
Lock testLock = hazelcastInstance.getLock( "testLock" );
testLock.lock();
try 
{
   // critical section code.
} 
finally 
{
   testLock.unlock();
}
Run Code Online (Sandbox Code Playgroud)