locking - 如何使用榛铸锁

标签 locking hazelcast

我必须将使用旧版本 hazelcast 的应用程序升级到最新版本之一。有一些 hazelcast 锁功能已被弃用并从 API 中完全删除。特别是,旧的锁定功能的工作方式如下:

Hazecast.getLock(myString);

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

hazelcastInstance.getLock(myString);

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

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

最佳答案

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

你可以想到ILock在 hazelcast 框架中作为 java.util.concurrent.locks.Lock 的分布式实现。更多详情请参见

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

Q2:如果使用 ILock 锁定关键部分,那么 protected 临界区保证在给定时间点仅由整个集群中的一个线程执行。因此一旦lock()方法由 Thread1 调用在一个节点中,其他线程(也在其他节点中)将等待,直到锁被释放。

示例代码:

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

关于locking - 如何使用榛铸锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32892497/

相关文章:

mysql - 如果在共享模式下选择锁定后程序执行中止,则行锁定

linux - Linux 线程中的文件段/节/记录锁

java - 有没有办法关闭 JVM 中的 Hazelcast 实例?

java - key 已存在时的 hazelcast imap put 方法

hazelcast - Hazelcast 中的同步复制

Java多线程-无需等待的锁定

c++ - 是否有 `shared_lock_guard`,如果没有,它会是什么样子?

Redis 对比 Memcahced 对比 Hazelcast

java - Spring 启动: Iterate and evaluate all (active) sessions

Java 锁 : How equality check for Monitor locks is done in synchronized block?