# Ver presentación hilos
# Entrega de la práctica sobre procesos

----------------

# Programación multihilo:
 -	Recursos compartidos por los hilos.
 -	Estados de un hilo. Cambios de estado.
 -	Elementos relacionados con la programación de hilos. Librerías y clases.
 -	Gestión de hilos.
 -	Sincronización de hilos.
 -	Compartición de información entre hilos.
 -	Programación de aplicaciones multihilo.

# Existen dos técnicas para crear un thread:
- Heredar de la clase java.lang.Thread y sobrescribir el método run().
- Implementar el interfaz java.lang.Runnable (por tanto tenemos que implementar el método run() ) y crear una instancia de la clase java.lang.Thread pasándole el objeto que implementa java.lang.Runnable como parámetro.

# Ejemplo de creación de threads
```Java
public class TortugaThread extends Thread 
{
	public void run()
	{
		int i=0;
		System.out.println("Comienza la Tortuga.");
		while(i<5)
		{
			try
			{
				Thread.sleep(5000);
				System.out.println("Tortuga.");
			}
			catch(InterruptedException ex) 
			{
			}
			i++;
		}
		System.out.println("Termina la Tortuga.");
	}
}
```

```Java
public class LiebreThread implements Runnable
{
	public void run()
	{
		int i=0;
		System.out.println("Comienza la Liebre.");
		while(i<5)
		{
			try
			{
				Thread.sleep(2000);
				System.out.println("Liebre.");
			}
			catch(InterruptedException ex)
			{
			}
			i++;
		}
		System.out.println("Termina la Liebre.");
	}
}
```
```Java
public class Carrera
{
	public static void main(String[] args)
	{
		TortugaThread tortuga = new TortugaThread();
		Thread liebre = new Thread(new LiebreThread());
		tortuga.start();
		liebre.start();
	}
}
```
