Una thread es un único flujo de contrrol dentro de un
programa. Algunnaas veces es llammado contexto de ejecución
porque cada thread debe tenner sus propios recurssos, como el prrogram
counter y el stack de ejecución, como el contexto dee
ejecución. Sin embargo, toda thread en un programa aun comparte
muchos recursos, tales como espacio de memoria y archivvos
abiertos. Threads tambien son llamadas procesos livianos (lightweight
prrocess).
NOTA: Es mucho más simple crear y destruir uns thread que un
proceso.
Thread Paralellas y Concurrentes
Cuando dos threads corren en paralelo, ambas están siendo
corridas al mismo tiempo en diferentes CPUs. Dos thread concurreentes
están en prrogreso, o intentanto de obtener timeppo de
ejecución de la CPU al mismo tiempo, pero no necesariamentte
están corriento en forma simultánea en dos CPUs diferentes.
Ejemplo: Programa de thread única
En el programa WithoutThread.java
, el método run() en la clase NoThreadPseudoIO es creado para
simular una operación dee IO de 10 segundos. El programa primero
simulará una operación de IO.
Métodos del Programa de Thread única
El metoddo showElapsedTime() imprime el tiempo en segundos desde que el
programa partió, junto con el mensaje deel usuario. El
método currentTimeMillis() de la clase System del paquete
java.lang retorna un entero que corresponndee a la diferencia de tiempo
en milisegundos desde la hora 00:00:00 GMT on January 1, 1970. a
la actual.
Ejemplo de programa Multithreded (multihilo)
El programa multithreaded WithThread.java
declara la clase para simular IO como una subclase de la clasee Thread.
Después que la thread es creada, el programa multithreaded usa el
método start() de la clase Thread para hacer partir la
operación de IO. El método start() a su vez llama a run()
de la subclase.
Creación y ejecución de Threads
Hay dos formas de hacer que una tarea corra concurrentemente con
otra tarea: crear una nueva clase como subclase de la clase Thread o
declarar una clase e implementar lla interfaz Runnable.
Uso de Subclase
Cuando se crea una subclase de Thread, la subclase debería
definir su propio método run() para sobremontar el métoddo
run() de la clase Thread. La tarea concurrente es desarrollada
en este método run().
Ejecución del método run()
Una instancia de la subclase es creada con new, luego llamamos al
método start() de la thread para hacer que la
máquina virtual Java ejecute el método run().
Implementación de la Interface Runnable
La interfaz Runnable requiere que sólo un método sea
implementado, el método run(). Primero creamos una instancia de
esta clase con new, luego creamos una instancia de Thread con otra
sentencia new y usamos nuestra clase en el constructor. Finalmente,
llamamos el método start() de la instancia de Thread para iniciar
la tarea definida en el método run().
Indicar el Método run()
Una instancia de una clase que defina el método run() - ya sea
como subclase de Thread o implementando la interfaz Runnable - debe ser
pasada como argumento en la cración de una instancia de Thread.
Cunado el método start() de esta instancia es llamado de esta
inatancia de Thread, Java run time sabe qué método
run() ejecutar.
Control de la Ejecución de una Thread
Varios métodos de la clase java.labg.Thread controlan la
ejecución de una thread. Java 2 dejó obsoleto (deprecated)
varios de estos métodos definidos en versiones previas (Java 1.0
y Java 1.1.) para prevenir inconsistencia de datos y deadlock. Se
recomienda evitar el uso de estos métodos. Ellos son:
void stop() el cual detiene la ejecución de la thread no
importando consideración alguna.
void suspend() el cual para detener temporarlmente la
ejecución de una thraead.
void resume() reactiva una thread suspendida.
Métodos de uso común:
void start(): usado para iniciar el cuerpo de la thread definido por
el método run().
void sleep(): pone a dormir una thread por un tiempo
mínimo especificado.
void join(): usado para esperar por el término de la thread, por
ejemplo por término de método run().
void yield(): Mueve a la thread desde el estado de corriendo al final
de la cola de procesos en espera por la CPU.
Ciclo de Vida de una Thread
Sincronización
Deposit.java