Từ tài liệu Java java.util.concurrent.Semaphore nó không hoàn toàn rõ ràng với tôi điều gì sẽ xảy ra nếu semaphore.acquire() khóa luồng và sau đó bị gián đoạn bởi một InterruptedException. Có giá trị semaphore đã được giảm và như vậy là có cần phải phát hành semaphore?Cần phải semaphore.relase() nếu semaphore.acquire() được InterruptedException?
Hiện nay tôi đang sử dụng mã như thế này:
try {
// use semaphore to limit number of parallel threads
semaphore.acquire();
doMyWork();
}
finally {
semaphore.release();
}
Hoặc tôi nên thay không gọi phóng thích() khi một InterruptedException xảy ra trong quá Acquire()?
Cảm ơn, điều đó rất hợp lý. Tôi sẽ thay đổi mã của tôi như bạn đã đề xuất. – kasimir
Vấn đề với điều này là semaphore.acquire() cũng ném InterruptedException. – jblack