Hazelcast锁(例如http://www.hazelcast.com/docs/1.9.4/manual/multi_html/ch02s07.html)据我所知,它的行为方式与Java并发原语相同,但是在整个群集中。这使得可以用于在本地进程中的线程以及集群之间进行同步。
但是,有什么办法可以选择退出这种行为吗?在我当前的项目中,我需要一种协调集群中资源的唯一所有权的方法,但是想要从我的应用程序中的多个点获取并释放这种所有权 - 我能否以某种方式执行此操作,而不涉及将线程专用于管理这锁定在我的过程中?
答案 0 :(得分:6)
信号量是你的朋友,因为它没有所有权的概念。它使用可以获得的许可证;线程x可以获取许可证1,但是线程y可以释放许可证1.如果您使用单个许可证初始化信号量,您将获得互斥。
ISemaphore s = hazelcastInstance.getSemaphore("foo");
s.init(1);
s.acquire();
在另一个帖子中,您可以通过以下方式释放此许可证:
ISemaphore s = hazelcastInstance.getSemaphore("foo");
s.release();