Thread
Thread
Thread
Definición 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.
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().
”
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.
“
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).
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.
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.