Como ejemplo, sea esta cuenta absurda que mira el saldo y espera un ratito antes de actualizarlo en cuenta:
class Cuenta |
public class Cuenta { private volatile int saldo = 0; public int getSaldo() { return saldo; } public 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 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; } } |
Si ponemos a funcionar varios clientes a la vez, tenemos problemas de actualización de la variable “saldo”.
A continuación se presentan dos soluciones, ambas consistentes en convertir la cuenta compartida en un monitor.
Temas relacionados