У меня есть три потока, и им нужны для запуска некоторые ресурсы (A, B, C), которые я реализовал с помощью семафоров.
public void run(){
while(!Thread.currentThread().isInterrupted){
try{
A.acquire(2);
B.acquire(2);
//some-stuff
}
catch(InterruptedException ex){}
finally{
A.release(2); //PROBLEM
B.release(2);
}
}
Проблема: во время работы поток может быть прерван, но при работев методе finally
я не знаю, где я находился во время прерывания, поэтому я не знаю, должен ли я что-то выпустить или нет.Я пробовал много разных реализаций, например, с использованием метода (boolean) tryAcquire()
, но возникает другая проблема: если я получу ресурс A, но не B, то в блоке finally я снова отпущу A и т. Д.предложения?Спасибо.