Professional Documents
Culture Documents
INTEGRANTES :
DOCENTE :
• Ing. CIP Aldo Pereda Castillo
CURSO :
CICLO :
• IV
ESCUELA :
• Ing. Sistemas
2008
1
INTRODUCCION
Sin más preámbulos empecemos con todo lo que concierne a los Threads, un
tema que a mi parecer es la matriz de la programación orientada a objetos.
2
INDICE
I. QUE ES UNTHREAD……………………………………………………………………………………… 3
¿PARA QUE SE UTILIZAN ?
1. TIPOS DE THREAD
2. CONTROL BASICO DE UN THREAD
II. CLASES RELACIONADAS CON LOS HILOS……………………………………………5
1. LA CLASE THREADS
2. Runnable
3. ThreadDeath
4. TreadGroup
5. Object
III. CICLO DE VIDA DE UN THREAD ………………………………………………………………8
V. CONTROL DE UN HILO………………………………………………………………………………..12
1. Arranque de un hilo
2. Manipulación de un hilo
3. Suspensión de un Hilo
4. Parada de un Hilo
• stop ()
• isAlive ()
VI. AGRUPAMIENTO DE HILOS……………………………………………………………………...13
1. Grupo de hilos por defecto
2. Grupo de hilos de forma explicita
VII. LA CLASE ThreadGroup …………………………………………………………………………………15
IX . SINCRONIZACION……………………………………………………………………………………………..16
1. Uso de synchronized.
3. Monitores
IX. CONCLUSIONES………………………………………………………………………………………………….18
3
I. QUE ES UN THREAD:
Desde el punto de vista de las aplicaciones los hilos son útiles porque permiten
que el flujo del programa sea divido en dos o más partes, cada una ocupándose
de alguna tarea de forma independiente. Por ejemplo un hilo puede encargarse
de la comunicación con el usuario, mientras que otros actúan en segundo plano,
realizando la transmisión de un fichero,
Accediendo a recursos del sistema (cargar sonidos, leer ficheros...), etc. De
hecho, todos los programas con interfaz gráfico (AWT o Swing) son multihilo
porque los eventos y las rutinas de dibujado de las ventanas corren en un hilo
distinto al principal.
4
1. TIPOS DE THREAD
Tipos de threads que pueden aparecer en una aplicación:
5
o join(). Bloquea el thread actual, hasta que el thead sobre el
cual ha sido ejecutado el join termina.
• Thread
• Runnable
• ThreadDeath
• ThreadGroup
• Object
1. la clase thread
super (str);
6
public void run() {
new ThreadEjemplo("Juan").start();
2. Runnable
3. ThreadDeath
7
situación bastante inusual. Si se recoge el objeto, debe ser relanzado para que
el hilo realmente muera.
4. ThreadGroup
5. Object
El método wait hace que el hilo de ejecución espere en estado dormido hasta
que se le notifique que continúe. Del mismo modo, el método
notify informa a un hilo en espera de que continúe con su ejecución. El método
notifyAll es similar a notify excepto que se aplica a todos los hilos en espera.
Estos tres métodos solo pueden ser llamados desde un método o bloque
sincronizado (o bloque de sincronización).
8
III. CICLO DE VIDA DE UN THREAD:
Por último cuando el método run finaliza el hilo termina y pasa a la situación
Dead (Muerto).
IV.PRIORIDADES:
9
hilos no pueden garantizar el orden en que se ejecutarán. De manera
predeterminada, a cada hilo se le asigna la prioridad
Thread.NORM_PRIORITY (una constante de 5).
• Se detiene voluntariamente
Si dos o más hilos están listos para ejecutarse y tienen la misma prioridad, la
máquina virtual va cediendo control de forma cíclica (round-robin).
El hecho de que un hilo con una prioridad más alta interrumpa a otro se
denomina se denomina planificación apropiativa (preemptive scheduling).
Cuando un hilo entra en ejecución y no cede voluntariamente el control para que
puedan ejecutarse otros hilos, se dice que es un hilo egoísta (selfish thread).
10
• SetPriority; Ajusta la prioridad de un hilo o thread, el cual acepta un
argumento int en el rango de 1-10.
Por otro lado, es un error pensar que la interfaz Runnable está realizando
alguna tarea mientras un hilo de alguna clase que la implemente se está
ejecutando. Es una interfaz, y como tal, sólo contiene funciones abstractas
(concretamente una única, run), proporcionando tan solo una idea de diseño, de
infraestructura, de la clase Thread, pero ninguna funcionalidad. Su declaración
en Java tiene el siguiente aspecto:
package Java.lang;
11
public interfaz Runnable {
public abstract void run() ;
}
Una vez de haber visto las dos maneras de crear un hilo , sale a la luz la
interrogante de cual es mejor usar , a continuación veamos un poco de los
beneficios de cada uno :
V. CONTROL DE UN HILO:
12
1. Arranque de un hilo
siendo TestTh una subclase de la clase Thread (o una clase que implemente la
interfaz Runnable) crea un nuevo hilo. Los dos argumentos pasados, sin mayor
relevancia, satisfarán el prototipo del constructor de la clase y se utilizarán
para la inicialización del objeto.
start (); en realidad es un método oculto en el hilo que llama al método run.
2. Manipulación de un hilo
Si todo fue bien en la creación del objeto TestTh (t1), éste debería contener
un hilo, una traza de ejecución válida, que controlaremos en el método run del
objeto.
13
El hilo es suspendido indefinidamente y para volver a activarlo de nuevo
necesitamos realizar una invocación a la función miembro resume.
4. Parada de un Hilo
• stop ();
Señalar que esta llamada no destruye el hilo, sino que detiene su ejecución, y
ésta no puede reanudarse con el método start. Cuando se designen las variables
que se usan en el hilo, el objeto hilo (creado con new) quedará marcado para
eliminarlo y el garbage collector (recolector de basura de Java) se encargará
de liberar la memoria que utilizaba.
• isAlive ();
Devolverá true en caso de que el hilo esté vivo, es decir, ya se haya llamado a
su método run y no haya sido parado con un stop ni haya terminado el método
run en su ejecución. En otro caso, lógicamente, devolverá false.
14
El runtime system (sistema de tiempo de ejecución) de Java pone un hilo
dentro de un grupo de hilos en el momento de la construcción del mismo.
Cuando creas un hilo, se puede dejar que el sistema de tiempo de ejecución
ponga el nuevo hilo en algún grupo razonable por defecto, o se puede establecer
explícitamente el grupo del nuevo hilo. El hilo es un miembro
permanente de aquel que sea el grupo de hilos al cual se unió en el momento de
su creación. No puede moverse un hilo a un nuevo grupo una vez que ha sido
creado.
Cada uno de estos constructores crea un nuevo hilo, lo inicializa en base a los
parámetros Runnable y String, y hace al nuevo hilo miembro del grupo
especificado. Por ejemplo, la siguiente muestra de código crea un grupo de hilos
(myThreadGroup) y entonces crea un hilo (myThread) en dicho grupo
15
El ThreadGroup pasado al constructor Thread no tiene que ser necesariamente
un grupo que hayas creado tú, puede tratarse de un grupo creado por el
sistema de ejecución de Java, o un grupo creado por la aplicación en la cual se
está ejecutando el applet.
El grupo de hilos de más alto nivel en una aplicación Java es el grupo de hilos
denominado main.
• getMaxPriority y setMaxPriority
• getDaemon y SetDaemon
• getName
• getParent y parentOf
• toString
• resume
• stop
• suspend
IX. THREAD DAEMON:
16
VIII. SINCRONIZACION:
1. Uso de synchronized.
synchronized ( variableCompartida )
{ // acceso al recurso
• Métodos synchronized
{ // acceso al recurso
17
2. Comunicación entre threads
o wait() y notify()
• Si un thread ejecuta una llamada wait() sobre un objeto x pausará
su ejecución hasta que otro thread ejecute la llamada a notify()
mediante el mismo objeto x.
• Para poder ejecutar tanto un wait() como un notify() el thread
deberá disponer del flag de bloqueo, es decir, solo podrán ser
ejecutadis desde un bloque de código synchronized.
• Listas de espera o “pools”
3. Monitores
18
IX. CONCLUSIONES:
19