Para controlar la actualización de la variable “saldo” podemos establecer una zona de exclusión mutua usando cualquier objeto. En el código que sigue se han establecido 2 zonas de exclusión, usando ambas el mismo objeto de control, de forma que la exclusión abarca ambas zonas:
class Cuenta modificada |
public class Cuenta { private volatile int saldo = 0; private final Object zona = new Object(); public int getSaldo() { synchronized (zona) { return saldo; } } public int ingresar(int dinero) { synchronized (zona) { 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 int sacar(int dinero) { synchronized (zona) { 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; } } } |
Temas relacionados