Hilos en C#

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Para usarlos puedo extender thread o implementar Runnable

Dos ejemplos de hilos en la vida real

Cuando se venden las entradas del concierto de Madonna. En poco segundos todas las entradas quedan agotadas debido a la gran demanda. El proceso que materializa la compra de la entrada no debe ser realizado por varios usuarios a la vez, ya que se corre el riesgo de que se vendan más entradas de las que realmente hay disponibles. Esa parte del código habrá que sincronizarla.

Varias personas entran en un supermercado en el que sólo hay un dependiente. Aunque cada cliente deambula por el supermercado a su aire, mirando productos, escogiendo los que tienen menos conservantes, etc. a la hora de pagar los clientes deben ponerse en cola e ir siendo atendidos por el vendedor de uno a uno. Esta sería la parte sincronizada de un algoritmo que representase lo que ocurre en el supermercado.

Ejemplo de aplicación sin usar hilos

Aunque creamos 3 «pseudohilos», realmente no lo son, y el código de un hilo no se ejecutará hasta que no haya concluído el «pseudohilo» anterior.

WithoutThreads.javaclass WithoutThreads{
	static void Main(string[] args){
		FalseThread t1 = new FalseThread();
		FalseThread t2 = new FalseThread();
		FalseThread t3 = new FalseThread();

		t1.Start();
		t2.Start();
		t3.Start();
	}
}
Hilo.javaclass FalseThread{
	static double variable1 = 100;
	public void Start(){
		variable1 -= 10;
		System.Threading.Thread.Sleep(new TimeSpan(0, 0, 1));
		Console.WriteLine("Variable1:" + variable1);
	}
}

Output:
Variable1:90.0
Variable1:80.0
Variable1:70.0

Usar Thread

class WithThreadClass{
	static double variable1 = 100;

	static void Main(string[] args){
		Thread t1 = new Thread(AsyncMethod);
		Thread t2 = new Thread(AsyncMethod);
		Thread t3 = new Thread(AsyncMethod);

		t1.Start();
		t2.Start();
		t3.Start();
	}

	static void AsyncMethod(){
		variable1 -= 10;
		System.Threading.Thread.Sleep(new TimeSpan(0, 0, 1));
		Console.WriteLine("Variable1:" + variable1);
	}
}

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.