作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须将使用旧版本 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/
我是一名优秀的程序员,十分优秀!