2011-03-11 60 views

回答

2

只需使用Semaphore.acquire(int permits)。它將等待,直到有permits許可證可用。

如果你想以確保沒有其他線程晚些時候推出可以「偷」許可證,所以它需要的下一個可用permits許可證,創建信號量與fair設置爲true。

0

請查看此鏈接的示例http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Semaphore.html。您可以在getNextAvailableItem()方法中添加條件以等待許可證的數量上升到鏈接中的一定數量的示例。分享有關您的問題的更多詳情/說明。

+0

無法顯示鏈接。 – 2011-03-11 10:56:48

+0

更新了鏈接。 – Samra 2011-03-11 10:59:25

+0

這並不顯示如何將信號置於「等待」狀態。只要有一個許可證可用,信號量就會讓它通過,但我需要一些信號量會阻塞的東西,直到至少有n個許可證可用。 – 2011-03-11 11:09:59

0

對不起,我不明白你想要做什麼。聽起來像CyclicBarrier在這種情況下會是一個更好的機制。

+0

你能否提供一個工作示例? – 2011-03-11 13:09:06

+0

感謝編輯,但這不會讓我給他們(線程)成對訪問一個對象。對不起,我沒有說明這是我的OP。我需要的是隻有兩個線程才能訪問一個對象,並且只有在這兩個線程完成這個對象後,另外兩個線程才能訪問它。再次抱歉,不要在OP中進行specyfing。 – 2011-03-11 13:40:05