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

Sof*_*mes 4 locking distributed-lock hazelcast

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

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

pve*_*jer 7

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

ISemaphore s = hazelcastInstance.getSemaphore("foo");
s.init(1);
s.acquire(); 
Run Code Online (Sandbox Code Playgroud)

在另一个主题中,您可以通过以下方式释放此许可

ISemaphore s = hazelcastInstance.getSemaphore("foo");
s.release(); 
Run Code Online (Sandbox Code Playgroud)