Domanda

Ci sono effetti collaterali poco chiari a un'eccezione all'interno di una clausola sincronizzato? Cosa succede al blocco?

private void doSomething() throws Exception {...}

synchronized (lock) {   
    doSomething();       
}
È stato utile?

Soluzione

Non vedo alcun effetto collaterale.

bloccaggio è garantito essere terminato in tutti i casi, e un'eccezione è un'eccezione (gioco di parole).

Altri suggerimenti

Come si spera, il blocco viene rilasciato normalmente.

Per riferimento, la sezione del GLS che garantisce questo comportamento è § 14.19 :

  

Se l'esecuzione del blocco completa normalmente, poi la serratura è sbloccato e la dichiarazione sincronizzato completa normalmente. Se l'esecuzione del blocco completa bruscamente, per qualsiasi motivo, allora il blocco è sbloccato e la dichiarazione sincronizzato completa quindi bruscamente per lo stesso motivo.

( 'completamento brusca' è definito altrove nel JLS per includere eccezioni JVM, le eccezioni sollevate da throw, e l'uso delle break, continue, o dichiarazioni return da trasferire al di fuori del blocco.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top