Sei sulla pagina 1di 12

Hilos (Threads)

• Se llama hilo de ejecución a la línea de vida que tiene un proceso


que inicia, opera y se detiene
• Cada hilo se asocia con un proceso o tarea que se quiere realizar
Hilos • Cuando una entidad puede tratar más de un hilo al tiempo se dice
que es concurrente
-Las computadoras pueden realizar operaciones
concurrentemente (compilar un programa, enviar un archivo a
una impresora, recibir e-mails)
-La máquina virtual de java es un sistema multihilo. Es capaz
de tratar varios hilos de ejecución simultáneamente
Hilos (Threads) Hilos (Threads)

• Los hilos son útiles porque permiten que el flujo de un programa sea Existen dos formas de trabajar con hilos en Java
dividido en dos o más partes, cada una ocupándose de alguna tarea de
-Por medio de la clase Thread
forma independiente
-Por medio de la interfaz Runnable
-Un hilo se encarga de la comunicación con el usuario
-Otro hilo realiza la transmisión de un archivo
Hilos (Threads) Hilos (Threads)

new Hilos en Java por medio de la clase Thread


Creado
•Desarrollar una clase que herede de Thread y sobrescribir el
start método run (lo que hace el hilo)
run

En ejecución
notify
Termina las
instrucciones
wait sleep en run

En espera Inactivo

Expira el tiempo que


debía estar dormido
Hilos (Threads) Hilos (Threads)

public class ThreadEjemplo extends Thread public class ThreadEjemplo extends Thread Se hereda de la
{ { clase Thread
public ThreadEjemplo(String s) public ThreadEjemplo(String s)
{ {
super(s); super(s); Se utiliza el constructor de
} } Thread por medio del cual se
puede colocar un nombre al hilo
public void run() public void run() Se sobrescribe el método run.
{ { Esto es lo que hace (la tarea) el
System.out.println("Mensaje 1 del hilo " + getName()); System.out.println("Mensaje 1 del hilo " + getName());
hilo
System.out.println("Mensaje 2 del hilo " + getName()); System.out.println("Mensaje 2 del hilo " + getName());
System.out.println("Mensaje 3 del hilo " + getName()); System.out.println("Mensaje 3 del hilo " + getName());
} }

} }
Hilos (Threads) Hilos (Threads)

public class PruebaHilos1


new
{ Creado
public static void main (String [] args) {
start
run
ThreadEjemplo hilo1= new ThreadEjemplo("Tarea1");
Se crean dos hilos
ThreadEjemplo hilo2 = new ThreadEjemplo("Tarea2"); En ejecución
notify
Termina las
instrucciones
hilo1.start(); Se inician los hilos wait sleep en run
hilo2.start();

En espera Inactivo
}

} Expira el tiempo que


debía estar dormido
Hilos (Threads) Hilos (Threads)

Note que no se ejecuta el método Note que no se ejecuta el método


run completo para un hilo y luego run completo para un hilo y luego
el otro, son procesos el otro, son procesos PruebaHilos1
concurrentes!!! concurrentes!!!
Hilos (Threads) Hilos (Threads)

class ThreadEjemplo extends Thread


{
public ThreadEjemplo(String s)
{
super(s);
}
public void run()
{ Se muestran
for (int i = 0; i < 10 ; i++) ahora 10
mensajes por
System.out.println(i + " " + getName());
cada hilo

System.out.println("Termina thread " + getName());


}
}

PruebaHilos2
Hilos (Threads) Hilos (Threads)
public class ThreadEjemplo extends Thread
Método sleep {
• Se especifica la cantidad de milisegundos que estará dormido el hilo public ThreadEjemplo(String s)
{
• Se debe manejar con un try-catch una posible excepción
super(s);
}
public void run()
{
System.out.println("El hilo " + getName() + " va a dormir 5 segundos");
try{
Dormir 5
sleep(5000); segundos
}
catch (InterruptedException excepcion){
System.out.println("Error al intentar sleep");
}
System.out.println("El hilo " + getName() + " despertó");
}
}
Hilos (Threads) Hilos (Threads)
public class ThreadEjemplo extends Thread
{
Problema: Crear un hilo que esté inactivo una cantidad aleatoria de
public ThreadEjemplo(String s)
milisegundos
{
super(s);
}
public void run()
{
System.out.println("El hilo " + getName() + " va a dormir 5 segundos");
try{
Dormir 5
sleep(5000); segundos
}
catch (InterruptedException excepcion){
System.out.println("Error al intentar sleep");
}
System.out.println("El hilo " + getName() + " despertó");
PruebaHilos3
}
}
Hilos (Threads) Hilos (Threads)
public void run()
Genera un Comunicación entre procesos
{ numero aleatorio
int tiempoDormir=(int)(Math.random()*10001); entre 0 y 10000
System.out.println("El hilo " + getName() + " va a dormir " + tiempoDormir + " milisegundos");

try{
sleep(tiempoDormir);
}
catch (InterruptedException excepcion){
System.out.println("Error al intentar sleep");
}

System.out.println("El hilo " + getName() + " despertó");

PruebaHilos4
Hilos (Threads) Hilos (Threads)

Problema: Crear una aplicación Java que permita dibujar un cuadrado Problema: Crear una animación de un semáforo. Cuando se da clic en la
de color aleatorio en una posición dada al hacer clic pero que éste ventana inicia la animación. Primero verde por 4 segundos, luego
dure solamente por 2 segundos amarillo por 1 y finalmente rojo por 3

MousePaint3 MousePaint4
Hilos (Threads)

public class Hilo implements Runnable


Hilos en Java por medio de la interfaz Runnable
{
Se implementa el
public void run()
método run
•Se debe implementar el método run {
System.out.println("Mensaje 1 del hilo " + Thread.currentThread().getName());
•Los otros métodos son de tipo final por lo tanto no se pueden System.out.println("Mensaje 2 del hilo " + Thread.currentThread().getName());
sobrescribir System.out.println("Mensaje 3 del hilo " + Thread.currentThread().getName());
•Para crear un hilo se utiliza la instrucción }

Thread hilo= new Thread(new Hilo(), "Tarea1");


}
donde Hilo es la clase que implementó a la interfaz Runnable

PruebaHilos5

Potrebbero piacerti anche