PDF de programación - Hilos

Imágen de pdf Hilos

Hilosgráfica de visualizaciones

Publicado el 10 de Julio del 2018
541 visualizaciones desde el 10 de Julio del 2018
100,1 KB
19 paginas
Creado hace 14a (24/06/2009)
Hilos

BUAP

Introducción

 Normalmente, los programas son ejecutados de

forma secuencial

Único flujo de control

 Un programa con un único flujo de control, ejecuta

sólo una tarea (hilo)

Dr. Ivan Olmos

2

Introducción

 Históricamente, los sistemas de cómputo
personales sólo han tenido un único CPU
 Al volverse más poderosos los CPU, se

desarrolló
 S. O. multitarea / multiproceso
 Programación multitarea (multihilo), multiproceso

Programación (pseudo)concurrente

Dr. Ivan Olmos

3

Hilos

 Un hilo (thread) es un flujo de control

secuencial dentro de un programa

public class Hola_Mundo {
public static void main(String[] args) {
System.out.println("Hola Mundo\n");
}
}

Una aplicación de control único realiza su tarea ejecutando subtareas

de forma secuencial

Dr. Ivan Olmos

4

Hilos

 Un programa puede generar dos o más hilos
de ejecución, los cuales siempre dependerán
de la aplicación principal
 P. E. Imprimir diferentes mensajes desde una

aplicación principal

Programa
Principal

Hola Mundo 1

Hola Mundo 2

Hola Mundo 3

Dr. Ivan Olmos

5

Características Generales de
los Hilos
 Típicamente, las tareas controlan un único

aspecto dentro de un programa

 Todas las tareas comparten los mismos

recursos

Aplicación Java

Thread 1

Thread 2

Thread 3

Dr. Ivan Olmos

6

Multitarea vs. Multiproceso

 Multiproceso: dos

programas se
ejecutan
“aparentemente” a la
vez, sin necesidad
de tener una relación
entre ellos

 Multitarea: dos o

más tareas se
ejecutan a la “vez”
dentro de un mismo
programa

Dr. Ivan Olmos

7

Ejemplo

class TestHilos extends Thread{
private String nombre;
private int retardo;

//constructor
public TestHilos(String s, int d){

nombre = s;
retardo = d;

}

//funcion para la ejecucion del hilo
public void run(){
try{

sleep(retardo);

} catch(InterruptedException e){
;
}
System.out.println("hola mundo " + nombre + " " + retardo);
}
}

public class hilos {

public static void main(String[] args) {
TestHilos t1,t2,t3;
t1 = new TestHilos("hilo_1",(int)(Math.random()*2000));
t2 = new TestHilos("hilo_2",(int)(Math.random()*2000));
t3 = new TestHilos("hilo_3",(int)(Math.random()*2000));

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

Dr. Ivan Olmos

8

Programación con
Hilos en Java

Introducción

 Java permite la ejecución de diferentes hilos

a partir de clases derivadas de la clase
Thread, o bien a través de la implementación
de la clase Runnable

Thread

Métodos de Clase

Métodos de Instancia

Dr. Ivan Olmos

10

Métodos de Clase

 currentThread()

 Devuelve el objeto Thread que representa a la

tarea que se esta ejecutando actualmente

 yield()

 sleep(long)

 Permite permutar la ejecución de la tarea actual y

la siguiente tarea ejecutable disponible

 Provoca que la tarea en curso entre en pausa

durante un número de milisegundos indicado por
“long”

Dr. Ivan Olmos

11

Métodos de Instancia

 Indica al interprete de java iniciar una tarea.

Inmediatamente se invoca al método run()

 Cuerpo de una tarea o hilo de ejecución. Es llamado por el

 start()

 run()

método start()

 stop()

 suspend()

 Detiene la ejecución de una tarea y la destruye

 Detiene la ejecución sin destruir la tarea de sistema
subyacente ni el estado de la tarea anteriormente en
ejecución

Dr. Ivan Olmos

12

Métodos de Instancia

 resume()

 setPriority(int)

 getPriority()

 setName(String)

 getName()

a la tarea

 Utilizada para revivir una tarea suspendida, aunque no se

garantiza que se inicie su ejecución de forma inmediata

 Asigna la prioridad indicada por “int” a una tarea (rango de
valores: 1, …, 10). Existen constantes predefinidas como
“MIN_PRIORITY”, “NORM_PRIORITY”, “MAX_PRIORITY”

 Devuelve la prioridad de una tarea en curso

 Permite identificar a una tarea a través de un nombre

 Devuelve el valor actual de tipo cadena asignado como nombre

Dr. Ivan Olmos

13

Creación de Tareas en Java

Extender la clase Thread

Implementación de la

clase Runnable

class TestHilos extends Thread{
public void run(){
. . .
}
}

•Ventaja: hereda todos los métodos
y variables de la clase Thread
•Desventaja: sólo se pueden
extender o derivar una vez de la
clase Thread

public class TestHilos implements Runnable{
Thread t;
public void run(){

. . .
}
}

•Ventaja: hereda todos los métodos
y variables de la clase Thread;
además permite heredar la clase
base a otras clases

Dr. Ivan Olmos

14

Ejemplo 1: Runnable

class NoHaceNada{
}

class MiHilo extends NoHaceNada implements Runnable{
private String nombre;
private int retardo;

public MiHilo(String s, int d){

nombre = s;
retardo = d;

}

public void run(){
try{
Thread.currentThread().sleep(retardo);
} catch (InterruptedException e){}

System.out.println("hola Mundo! " + nombre + " " + retardo
+ " " + Thread.currentThread());
}
}

public class Hilo2 {
public static void main(String[] args) {

Thread hiloA = new Thread(new MiHilo("Hilo1",
(int)(Math.random()*2000)), "hiloA");
Thread hiloB = new Thread(new MiHilo("Hilo2",
(int)(Math.random()*2000)), "hiloB");

hiloA.start();
hiloB.start();
try{
Thread.currentThread().sleep( 1000 );
} catch (InterruptedException e){}
System.out.println(Thread.currentThread());
}
}

Dr. Ivan Olmos

15

Ejemplo 2: Thread

class MiHilo extends Thread{

private String nombre;
private int retardo;

//constructor
public MiHilo(String s, int d){

nombre = s;
retardo = d;

}

}

public void run(){
try{
Thread.currentThread().sleep(retardo);
} catch (InterruptedException e){}
System.out.println("hola mundo! " + nombre + "

" + retardo + " " + Thread.currentThread());

}

public class Hilos3 {
public static void main(String[] args) {

Thread hiloA = new Thread(new MiHilo("hiloA",(int)
(Math.random()*2000)),"hiloA");
Thread hiloB = new Thread(new MiHilo("hiloB",(int)
(Math.random()*2000)),"hiloB");

hiloA.start();
hiloB.start();
try{
Thread.currentThread().sleep(1000);
} catch(InterruptedException e){}
System.out.println(Thread.currentThread());
}
}

Dr. Ivan Olmos

16

Ejemplo 3:

class TestHilos extends Thread{
private String nombre;
private int retardo;

//constructor
public TestHilos(String s, int d){

nombre = s;
retardo = d;

}

//funcion para la ejecucion del hilo
public void run(){
try{

sleep(retardo);

} catch(InterruptedException e){
;
}
System.out.println("hola mundo " + nombre + " " + retardo);
}
}

public class hilos {

public static void main(String[] args) {
TestHilos t1,t2,t3;
t1 = new TestHilos("hilo_1",(int)(Math.random()*2000));
t2 = new TestHilos("hilo_2",(int)(Math.random()*2000));
t3 = new TestHilos("hilo_3",(int)(Math.random()*2000));

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

Dr. Ivan Olmos

17

Sincronización de Hilos

 Cuando se trabaja con hilos, es común
realizar tareas de sincronización para:
 Determinar cuando un hilo puede operar sobre

los datos comunes

 Tomar como entrada de un hilo la salida de otro

hilo

 Recursos compartidos

Dr. Ivan Olmos

18

Sincronización de Hilos

 Para sincronizar hilos es importante utilizar

las funciones:
 wait: esperar por un evento – notify
 notify: avisa a cualquier proceso que esté en

espera por un objeto específico

 Analizar el ejemplo de sincronización

propuesto

Dr. Ivan Olmos

19
  • Links de descarga
http://lwp-l.com/pdf12453

Comentarios de: Hilos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad