Discusión:Monitores

De Wiki de Sistemas Operativos
Revisión del 16:47 16 nov 2011 de Pneira (discusión | contribuciones) (ejemplo en java)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Ejemplo en Java

Ejemplo de sincronización mediante monitores con 5 hilos que modifican dos variables. Cada hilo incrementa las dos variables una unidad. El hilo principal va mostrando el contenido de las variables. Si quitamos la clausula synchronized podemos ver como las variables no se incrementan a la vez.

public class Principal {
	public static void main(String[]args){
		RecursoCompartido c = new RecursoCompartido();
		for(int i=0;i<5;i++){
			new Hilo(c);
                }
		while(true){
			c.mostrar();
			try{
				Thread.sleep(20);
			}catch(InterruptedException e){}
		}
	}
}
class Hilo extends Thread{
	static int i=0;
	int h; 
	RecursoCompartido c;
	public Hilo(RecursoCompartido c){
		this.setDaemon(true);
		this.c=c;
		h=i++;
		this.start();
	}
	public void run(){
		while(true){
			c.incrementar();
			//System.out.println("Ahora se está ejecutando el hilo "+h);
			try{
				sleep(20);
			}catch(InterruptedException e){
				
			}
		}
	}
}

class RecursoCompartido{
	private int a = 0;
	private int b = 0;

	public synchronized void incrementar(){
		a++;
		b++;
	}
	public void mostrar(){
		System.out.println("a: "+a+"\tb: "+b);
	}
}