2013-11-04 60 views
3

Hazelcast鎖定(例如http://www.hazelcast.com/docs/1.9.4/manual/multi_html/ch02s07.html)據我瞭解,它的行爲與Java併發性原語相同,但在羣集中表現相同。這使得可以使用本地進程中的線程以及羣集之間的同步。在Hazelcast中,是否可以使用不關心執行鎖定/解鎖操作的本地線程的羣集鎖?

但是,有什麼辦法可以選擇退出此行爲嗎?在我目前的項目中,我需要一種協調整個集羣中資源的獨特所有權的方式,但是希望從我的應用程序中的多個點獲得並釋放此所有權 - 我能否以某種方式執行此操作,而不涉及專用線程來管理這個鎖在我的過程中?

回答

6

信號量是你的朋友,因爲它沒有所有權的概念。它使用可以獲得的許可證;線程x可以獲得許可證1,但是線程y可以釋放許可證1.如果您使用單個許可證初始化信號量,則會得到互斥。

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

而在另一個線程則可以通過釋放這個許可證:

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

最優秀的,謝謝! – SoftMemes

相關問題