VademécumVademécum\synchronized (palabra reservada)synchronized (palabra reservada)\Terminación abrupta

Terminación abrupta

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;

    }

}

principio