该
Semaphore.acquire(int)方法是一项全有或全无的操作,您将获得所有请求的许可或被阻止。您可以对代码进行两次尝试,也可以让(可能的)中断的异常阻止气泡进入调用堆栈。
双重尝试块:
try { lock.acquire(permits); try { // do some stuff here } finally { lock.release(permits); }} catch(final InterruptedException ie) { // handle acquire failure here}气泡“获取”例外:
lock.acquire(permits);try { // do some stuff here} finally { lock.release(permits);}切线切记,信号量必须通过严格的编程约定来保持平衡,因此,您应始终释放所获得的尽可能多的许可。



