Z dokumentacji Java java.util.concurrent.Semaphore nie było dla mnie jasne, co się stanie, jeśli semafore.acquire() blokuje wątek, a później zostaje przerwany przez wyjątek InterruptedException. Czy wartość semafora została zmniejszona i czy istnieje potrzeba zwolnienia semafora?Potrzebujesz do semafore.relase() czy semaphore.acquire() dostaje wyjątek InterruptedException?
Obecnie używam kodu:
try {
// use semaphore to limit number of parallel threads
semaphore.acquire();
doMyWork();
}
finally {
semaphore.release();
}
lub nie powinny raczej wywołać uwolnienie(), gdy wystąpi InterruptedException podczas nabywać()?
Dzięki, to brzmi bardzo rozsądnie. Zmienię kod, tak jak sugerowałeś. – kasimir
Problem polega na tym, że semafore.acquire() również generuje wyjątek InterruptedException. – jblack