Está en la página 1de 10

Hilos

Programación Orientada a Objetos II


Consuelo Varinia García Mendoza
Programación Multitarea
Basada en procesos;
 El proceso (un programa completo)es la unidad más pequeña que
se puede gestionar.
 Los procesos son más pesadas, requieren más recursos y necesitan

espacio de direccionamiento propio.


 La comunica entre procesos es costosa y limitada.

Basada en hilos:
 Parte de un programa que llamamos hilo es la unidad más
pequeña que se puede gestionar.
 Los hilos son más ligeros, comparten el mismo espacio de

memoria.
 La comunicación y el intercambio de contexto tiene un costo bajo.
Cambio de contexto
Pasar de la ejecución de un hilo a la ejecución de otro
hilo.
Un hilo puede ceder voluntariamente el control
Un hilo puede ser desalojado por otro de prioridad más
alta
Creación de un hilo

Implementando la interfaz Runnable

Extendiendo la propia clase Thread


Runnable
public class A implements Runnable {
Thread h;
// se implementa el único método de Runnable

public void run() {


……
Nombre del hilo
}
Objeto tipo Runnable
A(){
h =new Thread (this, “Hilo tipo A”);
h.start( );
}
}
public class Principal{
public static void main (String[] args)
{
A hilo = new A();
}
}
Runnable y Thread
public class A implements Runnable { public class B extends Thread {
Thread h;
// se implementa el único método de Runnable
// se sobreescribe el método run( ) de Thread
public void run() { public void run() {
…… ……
Nombre del hilo
} }
Objeto tipo Runnable
A(){ B() {
h =new Thread (this, “Hilo tipo A”); super (“Hilo de tipo B”);
h.start( ); //start( );
} }
} }
public class Principal{ public class Principal{
public static void main (String[] args) public static void main (String[] args) {
{
A hilo = new A(); B hilo = new B();
} hilo. start( );
}
}
}
Múltiples Hilos
public class A implements Runnable { public class B extends Thread {
Thread h; public void run() {
public void run() { ……
…… }
} B{
A{ super (“Hilo de tipo B”);
h =new Thread (this, “Hilo tipo A”); start( );
h.start( ); }
} }
} public class Principal{
public class Principal{ public static void main (String[] args) {
public static void main (String[] args)
B hilo_1 = new B();
{
B hilo_2 = new B();
A hilo_1 = new A(); B hilo_3= new B();
A hilo_2 = new A(); }
A hilo_3 = new A(); }
}
}
Runnable / Thread
Cualquiera de las dos opciones es valida, sin embargo
algunos programadores piensan que si no se va a
sobrescribir ningún método de la clase Thread, es
mejor implementar la interfaz Runable que tiene como
único método run().
currentThread(), setName(), sleep()
class HiloPrincipal{
public static void main (String[] args) {
Thread t=Thread.currentThread();
System.out.println("Hilo actual:" + t);
//Cambio del nombre del hilo
t.setName("Mi hilo");
System.out.println("Después del cambio de nombre" + t);

try{
for(int n = 5; n>0;n--){
System.out.println(n);
// Suspende la ejecución 1000 milisegundos
Thread.sleep(5000);
}

}catch(InterruptedException e){
System.out.println("Interrupción del hilo principal");
}

}
Salida
Nombre del hilo Prioridad Grupo

Hilo actual: Thread[main,5,main]

Después del cambio de nombre: Thread[Mi hilo,5,main]


5
4
3
2
1

También podría gustarte