在Hazelcast中,是否可以使用不关心执行锁定/解锁操作的本地线程的群集锁?

时间:2013-11-04 12:01:47

标签: locking hazelcast distributed-lock

Hazelcast锁(例如http://www.hazelcast.com/docs/1.9.4/manual/multi_html/ch02s07.html)据我所知,它的行为方式与Java并发原语相同,但是在整个群集中。这使得可以用于在本地进程中的线程以及集群之间进行同步。

但是,有什么办法可以选择退出这种行为吗?在我当前的项目中,我需要一种协调集群中资源的唯一所有权的方法,但是想要从我的应用程序中的多个点获取并释放这种所有权 - 我能否以某种方式执行此操作,而不涉及将线程专用于管理这锁定在我的过程中?

1 个答案:

答案 0 :(得分:6)

信号量是你的朋友,因为它没有所有权的概念。它使用可以获得的许可证;线程x可以获取许可证1,但是线程y可以释放许可证1.如果您使用单个许可证初始化信号量,您将获得互斥。

ISemaphore s = hazelcastInstance.getSemaphore("foo");
s.init(1);
s.acquire(); 

在另一个帖子中,您可以通过以下方式释放此许可证:

ISemaphore s = hazelcastInstance.getSemaphore("foo");
s.release();