java - 如果 semaphore.acquire() 得到 InterruptedException,需要 semaphore.relase()?

标签 java semaphore interrupted-exception

在 Java java.util.concurrent.Semaphore 文档中,我不太清楚如果 semaphore.acquire() 阻塞线程并随后被 InterruptedException 中断会发生什么。信号量值是否已经减小,是否需要释放信号量?

目前我正在使用这样的代码:

try {
  // use semaphore to limit number of parallel threads
  semaphore.acquire();
  doMyWork();
}
finally {
  semaphore.release();
}

或者在 acquire() 期间发生 InterruptedException 时我是否应该不调用 release() ?

最佳答案

call release() when an InterruptedException occurs during acquire() ?

你不应该。如果 .acquire() 被中断,则不会获取信号量,因此可能不应该释放它。

你的代码应该是

// use semaphore to limit number of parallel threads
semaphore.acquire();
try {
  doMyWork();
}
finally {
  semaphore.release();
}

关于java - 如果 semaphore.acquire() 得到 InterruptedException,需要 semaphore.relase()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12104978/

相关文章:

java - 从 Google Collections 中查找 Multiset 中的前 N ​​个元素?

java - 通过反射获取 NavigationBarView.java 的 "pointer"

c++ - boost::this_thread::interruption_point() 不会抛出 boost::thread_interrupted& 异常

java - 使用 JMS 连接到大型机

java - startactivity() 关闭应用程序

c# - 具有优先级的信号量

c - 如何在linux上的两个进程之间使用c中的posix命名信号量来共享内存?

ios - Swift 信号量在调用 UI 之前不等待函数完成

java - 使用parallelStream时抛出InterruptedException - Java

android - Universal-Image-Loader 中的任务被中断