Una zona sincronizada puede terminar abruptamente por diferentes motivos, siendo lo más frecuentes que salte una EXCEPTION que se captura fuera o que se acaba con un RETURN. En cualquier caso, java se encarga de abrir el cerrojo.
El siguiente ejemplo tiene métodos sincronizados, que terminan abruptamente cuando la cantidad a meter o sacar es negativa, o cuando no hay saldo suficiente:
public class CuentaCorriente {
private int
saldo = 0;
public
synchronized int meter(int cantidad) {
if (cantidad < 0)
return
saldo;
saldo +=
cantidad;
return saldo;
}
public
synchronized int sacar(int cantidad)
throws Exception {
if
(cantidad < 0)
return saldo;
if (saldo <
cantidad)
throw new
Exception("no hay saldo suficiente");
saldo -=
cantidad;
return saldo;
}
}
Temas relacionados
synchronized (palabra reservada)