VademécumVademécum\synchronized (palabra reservada)synchronized (palabra reservada)\Ejemplo: cuenta corrienteEjemplo: cuenta corriente\Solución con métodos sincronizados

Solución con métodos sincronizados

Para controlar la actualización de la variable “saldo” podemos marcar todos los métodos peligrosos. En el código que sigue se han marcado 3 métodos, de forma que la exclusión abarca a todos conjuntamente:

class Cuenta modificada

public class Cuenta {

    private volatile int saldo = 0;

 

    public synchronized int getSaldo() {

        return saldo;

    }

 

    public synchronized int ingresar(int dinero) {

        try {

            int x = saldo + dinero;

            int s = (int) (Math.random() * 2000);

            Thread.sleep(s);

            saldo = x;

        } catch (InterruptedException e) {

            System.err.println(e);

        }

        return saldo;

    }

 

    public synchronized int sacar(int dinero) {

        try {

            int x = saldo - dinero;

            int s = (int) (Math.random() * 2000);

            Thread.sleep(s);

            saldo = x;

        } catch (InterruptedException e) {

            System.err.println(e);

        }

        return saldo;

    }

}

 

Ver “monitores”.

principio
principio