我必须将使用旧版本的hazelcast的应用程序升级到最新版本之一。此后,不建议使用某些hazelcast锁定功能,并将其从API中完全删除。特别是,旧的锁定功能按以下方式工作:
Hazecast.getLock(myString);
Run Code Online (Sandbox Code Playgroud)
getLock函数是Hazelcast上的静态方法。现在将其替换为:
hazelcastInstance.getLock(myString);
Run Code Online (Sandbox Code Playgroud)
...该锁来自集群中的实例之一。
我的问题是,我可以使用hazelcast群集中的任何一个实例来获取锁吗?如果是这样,这会锁定所有实例吗?
问题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)
| 归档时间: |
|
| 查看次数: |
6776 次 |
| 最近记录: |