Ern*_*nie 11 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();
}
Run Code Online (Sandbox Code Playgroud)
或者我应该在acquire()期间发生InterruptedException时不要调用release()?
nos*_*nos 12
在acquire()期间发生InterruptedException时调用release()?
你不应该.如果.acquire()被中断,则不会获取信号量,因此很可能不会释放它.
你的代码应该是
// use semaphore to limit number of parallel threads
semaphore.acquire();
try {
doMyWork();
}
finally {
semaphore.release();
}
Run Code Online (Sandbox Code Playgroud)
nos 接受的答案是部分正确的,除了 semaphore.acquire() 也会抛出 InterruptedException。因此,要 100% 正确,代码将如下所示:
try {
semaphore.acquire();
try {
doMyWork();
} catch (InterruptedException e) {
// do something, if you wish
} finally {
semaphore.release();
}
} catch (InterruptedException e) {
// do something, if you wish
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9486 次 |
最近记录: |