Thread

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 17

Thread

Definición Thread

Un hilo (del inglés thread), es un proceso ligero o subproceso que


es una secuencia de tareas encadenadas muy pequeña que puede ser
ejecutada por un sistema operativo o simplemente una tarea que
puede ser ejecutada al mismo tiempo que otra tarea.

Ordinariamente, los hilos son una manera de asignar el tiempo de un


solo procesador. Pero si el sistema operativo es apoyado por
procesadores múltiples, cada hilo puede asignarse a un procesador
diferente y ellos pueden correr realmente en paralelo mejorando
significativamente el rendimiento.
Ciclo de Vida de un Thread
Ciclo de Vida de un Thread

• Estado “UnStarted”: El thread ha sido instanciado pero no se • Subestado “Sleeping”: El thread está supendido temporalmente
arrancado su ejecución. (durante el número de ms establecido por el
argumento del método sleep() que lo ha
• Estado “Alive”: El código del método run() se está dormido).
ejecutando.
• Subestado “Waiting”: El thread está suspendido indefinidamente
• Subestado “Runnable”: La ejecución del thread esta siendo (sobre la variable de condición del objeto
planificada por el procesador. thread por haber invocado el mismo el
método wait()).
• Subestado “Interruptor”: La ejecución del thread está
siendo planificada por el • Estado “Dead”: El thread ha finalizado. Un thread finaliza por uno
procesador, pero ero se ha de los tres siguientes modos:
invocado el método Interrupt sobre
el thread. - El método run() ejecuta la sentencia return o
alcanza su final.
• Subestado “Suspended”: El thread está supendido - Se invoca desde un thread activo el método
indefinidamente (porque sobre él se stop().
ha invocado el método suspend(). El - No se recupera la excepción
thread no está siendo planificado. InterruptedException estando en Waiting o
Sleeping.
Un hilo de ejecución o (THREAD)
puede ejecutar cualquier tarea
que pueda realizar un
programa normal y corriente.
Bastara con indicar lo que tiene
que hacer en el método run(),
que es el que define la actividad
principal de las tareas.

CREACIÓN DE UN THREAD
“ EXTENDS Thread :Java permite el
empleo de la herencia, característica
muy potente que permite definir una
clase tomando como base a otra clase
ya existente. Esto es una de las bases
de la reutilización de código, en lugar
de copiar y pegar.
Al heredar de una clase base
heredaremos tanto los atributos como
los métodos, mientras que los
constructores son utilizados, pero no
heredados.

PARTES IMPLEMÉNTALES EN UN THREAD

SUPER(msg); Nos permite heredar
la plantilla del Threads para
construir el objeto derivado a este,
es obligatorio colocarlo para que el
constructor no quede sin
parámetros.
Por lo tanto la palabra super()
siempre es la primera línea de un
constructor e invoca al constructor


de la clase superior que comparta
el mismo tipo de
parametrización.

PARTES IMPLEMÉNTALES EN UN THREAD


run(): El método run() constituye el cuerpo de un hilo en ejecución. Este es el


único método del interfaz Runnable. Es llamado por el método start() después
de que el hilo apropiado del sistema se haya inicializado. Siempre que el
método run() devuelva el control, el hilo actual se detendrá.

PARTES IMPLEMÉNTALES EN UN THREAD

start(): Este método indica al intérprete de Java que cree un contexto del hilo
del sistema y comience a ejecutarlo. A continuación, el método run() de este
hilo será invocado en el nuevo contexto del hilo. Hay que tener precaución de
no llamar al método start() más de una vez sobre un hilo determinado.

PARTES IMPLEMÉNTALES EN UN THREAD
“ Suspend(): permiten parar reversiblemente la
ejecución de un Thread.
Se reanuda cuando sobre él se ejecute el
método resume().

Interrupt(): se invoca el método para provocar


la cancelación ordenada del thread.

resume(): El método resume() se utiliza para revivir un hilo suspendido. No hay


garantías de que el hilo comience a ejecutarse inmediatamente, ya que puede
haber un hilo de mayor prioridad en ejecución actualmente, pero resume()
ocasiona que el hilo vuelva a ser un candidato a ser ejecutado.

PARTES IMPLEMÉNTALES EN UN THREAD


Sleep(): Suspende la ejecución del thread por el número de milisegundos
especificados.
OJO no confundir con Interrupt() ya que el método sleep solo pausa la
ejecución del hilo.

PARTES IMPLEMÉNTALES EN UN THREAD


El método join (), permite a un hilo esperar hasta que


otro hilo complete su ejecución. Si t es un objeto
Thread cuyo hilo se está ejecutando actualmente,
entonces t.join () se asegurará de que t termine antes
de que el programa ejecute la siguiente instrucción. ilo.
• join (): pondrá el hilo actual en espera hasta que el
hilo en el que se llama esté muerto. Si se interrumpe
el hilo, se lanzará InterruptedException.
• join (long millis): pondrá el subproceso actual en
espera hasta que el subproceso en el que se llama


esté muerto o espere el tiempo especificado
(milisegundos).
• join (long millis, int nanos): pondrá el hilo actual en
espera hasta que el hilo en el que se llama esté
muerto o espere el tiempo especificado
(milisegundos + nanos).

PARTES IMPLEMÉNTALES EN UN THREAD


“ 1. SetPriority(int priority) Establece la prioridad de Thread.
2. GetPriority(): Retorna la prioridad que tiene asignada el
thread.
3. Yield(): Básicamente significa que el subproceso no está
haciendo nada particularmente importante y, si es necesario
ejecutar otros subprocesos o procesos. De lo contrario, el hilo
actual continuará ejecutándose.
Constantes



MAX_PRIORITY //Máxima prioridad asignable al thread.
MIN_PRIORITY //Mínima prioridad asignable al thread.
NORM_PRIORITY //Prioridad por defecto que se asigna.

PARTES IMPLEMÉNTALES EN UN THREAD
APLICACIÓN AVANZADA EN LOS THREAD
Sincronización de hilos
Todos los hilos de un programa comparten el espacio de memoria,
haciendo posible que dos hilos accedan la misma variable o corran
el mismo método de un objeto al "mismo tiempo".
Se crea así la necesidad de disponer de un mecanismo
para bloquear el acceso de un hilo a un dato crítico si el dato está
siendo usado por otro hilo.
Por ejemplo, si en un sistema un método permite hacer un
depósito y luego dos hilos lo invocan, es posible que al final sólo
un depósito quede registrado al ejecutar las instrucciones en
forma traslapadas.

Podemos ver un ejemplo en esta pagina: Deposit.java

Traslapar: Cubrir parcialmente una cosa [a otra], como las tejas de un tejado.
Java utiliza la idea de monitores para sincronizar el acceso a datos. Un monitor es un

Modelo de Monitores
lugar bajo guardia donde todos los recursos tienen el mismo candado. Sólo una llave
abre todos los candados dentro de un monitor, y un hilo debe obtener la llave para
entrar al monitor y acceder a esos recursos protegidos.
Cada objeto en Java posee un candado y una llave para manejo de zonas críticas.
También existe un candado y llave por cada clase, éste se usa para los métodos
estáticos.

Si varios hilos desean entrar al monitor simultáneamente, sólo uno obtiene la llave. Los
otros son dejados fuera (bloqueados) hasta que el hilo con la llave termine de usar el
recurso exclusivo y devuelva la llave a la Máquina Virtual Java.

Podemos ver un ejemplo en esta pagina: Deposit2.java


Multihilos más avanzada
Para lograr buena sincronización entre las tareas en ocasiones
debemos hacer uso de otros mecanismos de sincronización. Para
ello veremos el ejemplo de un productor de números enteros y un
consumidor de ellos.
Podemos ver un ejemplo en esta pagina:NoWaitPandC.java

Este programa no garantiza que todos los enteros generados serán leído y que cada
entero será leído sólo una vez. La sentencia Synchronized garantiza que sólo una
operación sea hecha a la vez, pero no garantiza que ambos hilos lo hagan la forma
alternada.
Para lograr alternancia, usamos los llamados wait y notify.
Método wait() hará que el hilo que invoca se bloquee hasta que ocurra un timeout u
otro hilo llame el método notify() o notifyAll() sobre el mismo objeto (lo primero que
ocurra).
Los llamados wait(), notify() y notifyAll(), sólo pueden ser llamados dentro de un
método o bloque sincronizado.

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy