Como ejemplo usaremos un contador compartido. Si
este código se ejecuta con control, tendremos que un thread recoge el valor y antes de devolverlo modificado, otro thread se lo lleva y el resultado es un desastre.
class ContadorCompartido |
public class
ContadorCompartido { private int n = 0; public int getN(String id) { return n; } public void setN(String id, int n) { this.n = n; System.err.println(id + ": " + n); } } |
class IncrementadorLento |
public class
IncrementadorLento extends Thread { private String id; private ContadorCompartido cc; public IncrementadorLento(String id, ContadorCompartido cc) { this.id = id; this.cc = cc; } @Override public void run() { try { int valor = cc.getN(id); valor++; sleep(1000); cc.setN(id,
valor); } catch
(InterruptedException e) { System.err.println(e); } } } |
Temas relacionados
Zonas de exclusión mutua (concepto)