2016-06-21 73 views
1

我想创建一个使用信号量的有界队列,我需要获取信号量的所有许可。如何获得java中的所有许可?

在Java中有没有任何方法可以做到这一点?

+0

请参阅https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html#acquire(int) –

+0

@ShireResident,实际上,drainPermits()方法可能会更好适合。 –

+0

@jameslarge。感谢你的回答 –

回答

4

调用acquire(int)将阻塞,直到获得指定数量的许可证。

致电drainPermits()将获得当前可用并立即返回的任何许可证。

获得“所有信号量许可”的概念并没有意义。 A Semaphore是用最初的免费许可证数量创建的,但你可以在release()附加许可证然后acquire()他们。因此,您的应用程序应该跟踪它希望分配的许可数量,并仔细协调acquire()release()调用,以确保该数字不会更改。