Aus der Java- java.util.concurrent.Semaphore-Dokumentation war mir nicht ganz klar, was passiert, wenn semaphore.acquire () den Thread blockiert und später durch eine InterruptedException unterbrochen wird. Wurde der Semaphor-Wert verringert, und muss der Semaphor freigegeben werden?
Gegenwärtig verwende ich Code wie folgt:
%Vor%Oder sollte ich release () nicht aufrufen, wenn während acquire () eine InterruptedException auftritt?
Wenn der Thread vor dem Aufruf der Methodenaufzeichnung unterbrochen wird oder während des Wartens auf die Erlangung einer Genehmigung, wird die InterruptedException ausgelöst, und es wird keine Genehmigung gespeichert, sodass keine Freigabe erforderlich ist. Nur wenn Sie sicher sind, dass eine Genehmigung erworben wurde (nach dem Aufruf der Methode acquire), müssen Sie die Genehmigung freigeben. Sie sollten also vor dem Start Ihres Blockes etwas lernen, etwa wie folgt:
%Vor%Tags und Links java interrupted-exception semaphore