Semaphore acquire release的一个问题


发表于 2017-06-13 13:19


今天在测试Semaphore的时候发现,假设有如下方法:

   public static void main(String[] args) throws InterruptedException {
		Semaphore semaphore = new Semaphore(10);
		Thread.currentThread().interrupt();
		try {
			semaphore.acquire();
		} finally {
			semaphore.release();
			System.out.println(semaphore.availablePermits());
		}
	}

此时发现semaphore可用凭证是11,所以不能盲目的使用try final来获取、释放凭证。 如果换成 semaphore.acquireUninterruptibly() 则没有这样的问题,但看了源码发现这个方法还是存在一个回滚的情况。

https://stackoverflow.com/questions/23459807/when-to-use-java-util-concurrent-semaphores-acquire-and-acquireuninterruptibl 这里说明了在什么情况下需要使用哪种方法。


搜索