Sunteți pe pagina 1din 5

Threads 04

JA
Bauman / Dcima

Java Electrotecnia
Threads
Java

Threads, que son y por que se necesitan


Cuando un programa simple se ejecuta se llevan a cabo los siguientes procesos: comienza su
ejecucin, ejecuta el cdigo de inicializacin, llama a mtodos o procedimientos, ejecutando y procesando
hasta que termina sus tareas y el programa finaliza por s mismo, o el usuario sale de l. Este tipo de
programa usa una sola tarea, en donde este proceso es un solo enfoque de control para el programa.

Los multiprocesos, como sucede en Java, permiten que varios procesos de ejecucin diferentes operen
al mismo tiempo dentro del mismo programa, en paralelo, sin interferir entre s.

El siguiente es un ejemplo simple: suponga que tiene un enorme clculo cerca del inicio de la ejecucin
del programa. Puede ser que este enorme clculo no se necesite sino hasta despus en la ejecucin del
programa. De hecho, es tangencial al punto principal del programa, y necesita terminarse en algn
momento, pero no inmediatamente. En un programa con un solo proceso tendra que esperar a que
terminara ese clculo antes de que pudiera continuar ejecutando el resto del programa. En un programa
con multiproceso, puede poner se clculo en su propio proceso o tarea, permitiendo que el resto del
programa contine ejecutndose de forma independiente. Luego, en algn momento posterior en la
ejecucin, los procesos o tareas se renen (por ejemplo, el clculo guarda un valor en una variable, donde
una operacin de comparacin busca un valor) y el programa contina.
Ahora veamos un ejemplo del mundo real, tal como un automvil. Consideremos que un automvil
puede ser un programa multiproceso, lo cual resulta en una serie de instrucciones. Cuando se arranca el
programa del automvil se arrancan varios procesos: el proceso del motor, el proceso de la radio, del
ventilador, etctera. Cada uno de estos procesos o tareas se ejecuta bsicamente en forma independiente
a los dems. Si se detiene al proceso del motor, no se detienen necesariamente los procesos de la radio y
del ventilador.
Mediante los procesos, en Java puede crear un applet que se ejecute en su propio proceso por si
mismo sin interferir en ninguna otra parte del sistema. Mediante los procesos es posible tener varios
applets ejecutndose a la vez en la misma pgina. Sin embargo, tenga cuidado. Dependiendo de que
procesos inicie, a la larga puede disminuir la eficiencia del sistema y todos los procesos se ejecutarn con
ms lentitud, aunque todava se estarn ejecutando en forma independiente.
Aunque no requiera tener muchos applets en una pgina, el uso de procesos en sus applets es una
buena prctica de programacin en Java. La regla prctica general de los applets con buen
comportamiento es que cada vez que usted tenga algo de procesamiento que es probable que contine un
buen tiempo (tal como un ciclo de animacin o un fragmento de cdigo que se lleve mucho tiempo para
ejecutar), pngalo en su propio proceso).

2 POLITECNICO
Clase java.lang.Thread
Jerarqua
java.lang.Object
java.lang.Thread

Interfaces que implementa:


Runnable

Un thread (o proceso, tarea) es un hilo de ejecucin en un programa. La Mquina Virtual de Java


permite a una aplicacin tener mltiples procesos ejecutndose concurrentemente.
Todo proceso tiene una prioridad. Procesos con mayor prioridad son ejecutados en preferencia a
procesos con baja prioridad. Cada proceso puede o no tambin ser marcado como daemon. Cuando el
cdigo ejecutndose en algn proceso crea un nuevo objeto Thread, el nuevo proceso tiene inicialmente
su prioridad igual a la prioridad del proceso que lo cre, y es un proceso daemon si y slo si el proceso
que lo cre es un daemon.
Cuando una Mquina Virtual de Java comienza su ejecucin, usualmente hay un solo proceso (no
daemon) quien normalmente llama al mtodo llamado main de alguna clase designada. La Mquina
Virtual de Java contina ejecutando procesos hasta que ocurre alguna de las siguientes situaciones:
El mtodo exit de la clase Runtime fue llamado y el Administrador de Seguridad permiti que la
operacin de salida tuviera lugar.
Todos los procesos que murieron (terminaron su ejecucin), ya sea porque volvieron de la llamada al
mtodo run o a travs del mtodo stop.
Hay dos maneras de crear un nuevo hilo de ejecucin. Una de ellas es declarar una clase para que sea
una subclase de Thread. Esta subclase debiera especializar el mtodo run de la clase Thread. Entonces
una nueva instancia de la subclase se puede crear y arrancar (comenzar su ejecucin). Por ejemplo, un
proceso que calcula nmeros primos mayores a un valor dado se podra escribir de la siguiente manera:

class ProcesoPrimos extends Thread {


long minimoPrimo;

ProcesoPrimos(long minPrimo) {
this.minimoPrimo = minPrimo;
}

public void run() {


// calcula nmeros primos mayores que minimoPrimo
. . .
}
}

El siguiente cdigo creara un proceso y lo empezara a ejecutar:


ProcesoPrimos p = new ProcesoPrimos(143);
p.start();

La otra manera de crear un proceso es declarando una clase que implementa la interfaz
Runnable. De esta manera esta clase implementa el mtodo run. Una instancia de la clase
puede entonces ser instanciada, pasada como un argumento cuando se crea un Thread, y
ejecutado. El mismo ejemplo en esta otra manera es como sigue:

POLITECNICO 3
Threads
Java

class PrimoRun implements Runnable {


long minimoPrimo;
PrimoRun(long minPrimo) { this.minimoPrimo = minPrimo; }
public void run() {
// calcula nmeros primos mayores que minimoPrimo
. . .
}
}

El siguiente cdigo creara un proceso y lo empezara a ejecutar:


PrimoRun p = new PrimoRun(143);
Thread ProcesoControl = new Thread(p);
ProcesoControl.start();

Cada proceso tiene un nombre para propsitos de identificacin. Ms de un proceso puede


tener el mismo nombre. Si no se especifica un nombre cuando se crea un proceso, se genera
un nuevo nombre para l.

Miembros de la clase Thread


Propiedades
Nombre Descripcin
MAX_PRIORITY La mxima prioridad que puede tener un proceso.
MIN_PRIORITY La mnima prioridad que puede tener un proceso.
NORM_PRIORITY La prioridad que es asignada a un proceso por defecto.

Constructores
Nombre Descripcin
Thread() Crea un nuevo objeto Thread.
Thread(Runnable) Crea un nuevo objeto Thread que ejecuta el proceso indicado
en el objeto Runnable especificado.
Thread(Runnable, String) Crea un nuevo objeto Thread con el nombre especificado, que
ejecuta el proceso indicado en el objeto Runnable especificado.
Thread(String) Crea un nuevo objeto Thread con el nombre especificado.
Thread(ThreadGroup, Runnable) Crea un nuevo objeto Thread que ejecuta el proceso indicado
en el objeto Runnable especificado, y que pertenece al grupo de
procesos indicado.
Thread(ThreadGroup, Runnable, Crea un nuevo objeto Thread con el nombre especificado, que
String) ejecuta el proceso indicado en el objeto Runnable especificado,
y que pertenece al grupo de procesos indicado.
Thread(ThreadGroup, String) Crea un nuevo objeto Thread con el nombre especificado, y que
pertenece al grupo de procesos indicado.

4 POLITECNICO
Mtodos
Nombre Descripcin
activeCount() Devuelve el nmero actual de procesos activos en este grupo de procesos.
checkAccess() Determina si el proceso que se esta ejecutando tiene permiso para modificar
este proceso.
currentThread() Devuelve una referencia al objeto Thread que se esta ejecutando
actualmente.
destroy() Destruye este proceso, sin ningn tipo de limpieza de recursos.
enumerate(Thread[]) Copia en el array especificado cada proceso activo en este grupo de
procesos y en sus subgrupos.
getNombre() Devuelve el nombre de este proceso.
getPriority() Devuelve la prioridad de este proceso.
getThreadGroup() Devuelve el grupo de procesos de este proceso.
interrupt() Interrumpe este proceso.
interrupted() Verifica si el proceso actual fue interrumpido.
isAlive() Verifica si este proceso esta todava ejecutndose.
isDaemon() Verifica si este proceso es un proceso daemon.
isInterrupted() Verifica si el proceso actual fue interrumpido.
join() Espera que este proceso termine.
join(long) Espera al menos la cantidad de milisegundos indicados para que termine
este proceso.
join(long, int) Espera al menos la cantidad de milisegundos, y nanosegundos indicados
para que termine este proceso.
resume() Contina la ejecucin de un proceso suspendido.
run() Si este proceso fue construido usando un objeto Runnable separado,
entonces el mtodo run de ese objeto Runnable es llamado; sino este
mtodo no hace nada y regresa.
setDaemon(boolean) Marca este proceso como un proceso daemon o un proceso del usuario.
setNombre(String) Cambia el nombre de este proceso para que sea igual al argumento
indicado.
setPriority(int) Cambia la prioridad de este proceso.
sleep(long) Causa que el proceso que actualmente se este ejecutando se detenga (cese
de ejecucin temporario) por la cantidad especificada de milisegundos.
sleep(long, int) Causa que el proceso que actualmente se este ejecutando se detenga (cese
de ejecucin temporario) por la cantidad especificada de milisegundos, ms
la cantidad especificada de nanosegundos.
start() Empieza la ejecucin de este proceso; la Mquina Virtual de Java llama al
mtodo run de este proceso.
stop() Fuerza al proceso el cese de su ejecucin.
stop(Throwable) Fuerza al proceso el cese de su ejecucin.
suspend() Suspende este proceso.
toString() Devuelve una representacin string de este proceso, incluyendo el nombre,
prioridad, y grupo del proceso.
yield() Causa que el proceso que actualmente se este ejecutando se pause
temporariamente para permitir la ejecucin de otros procesos.

POLITECNICO 5

S-ar putea să vă placă și