4

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

但是,有什么方法可以让我选择退出这种行为?在我当前的项目中,我需要一种方法来协调整个集群中资源的唯一所有权,但想从我的应用程序中的多个点获取和释放这种所有权 - 我可以以某种方式做到这一点,而不涉及专用线程来管理这个锁在我的进程中?

4

1 回答 1

9

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

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

在另一个线程中,您可以通过以下方式释放此许可:

ISemaphore s = hazelcastInstance.getSemaphore("foo");
s.release(); 
于 2013-11-05T05:47:46.503 回答