2011-03-11 61 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