El manejo de hilos (Threads) es el último gran bloque del documento. Java permite la multitarea, es decir, que un programa ejecute varias secuencias de instrucciones de forma simultánea.
Según el texto, hay dos formas principales de crear un hilo y varios métodos para controlar su ciclo de vida:
1. Formas de crear un Hilo
Para que una clase se comporte como un hilo, tiene dos opciones:
- Heredar de la clase
Thread: La clase hija extiendeThready sobrescribe el métodorun(). - Implementar la interfaz
Runnable: Es la opción más flexible. La clase implementa el métodorun()de la interfaz. Luego, se crea un objetoThreadpasando esa instancia como parámetro.
El método
run(): Es el «corazón» del hilo. Todo el código que pongas dentro de este método es lo que se ejecutará de forma paralela.
2. Ciclo de Vida y Control
El documento detalla los métodos específicos para manejar un hilo una vez creado (suponiendo que el hilo se llama t1):
- Arranque (
t1.start()): Es fundamental. Este método indica a la Máquina Virtual que el hilo debe empezar. Internamente, llama al métodorun(). - Estado de vida (
t1.isAlive()): Devuelvetruesi el hilo ha comenzado y aún no ha terminado su ejecución ni ha sido parado. - Suspensión y Reanudación: *
t1.suspend(): Detiene temporalmente la ejecución.t1.resume(): Vuelve a activar el hilo suspendido.
- Parada (
t1.stop()): Termina la ejecución del hilo. Importante: Una vez detenido constop(), el hilo no puede volver a arrancarse constart().
3. La relación con el Garbage Collector
Como comentamos antes, el documento hace una observación muy importante sobre la memoria: Cuando un hilo se detiene (por stop() o porque termina su código) y las variables que lo referencian se desasignan, el objeto Thread queda marcado. El Garbage Collector se encargará entonces de liberar la memoria RAM que el hilo estaba utilizando.
4. Sincronización (Conceptos de concurrencia)
Aunque el extracto es breve, menciona métodos de la clase Object que se usan para que los hilos se comuniquen entre sí y no causen errores al acceder a los mismos datos:
wait(): El hilo se queda esperando hasta que otro le avise.notify()/notifyAll(): Avisan a uno o a todos los hilos que estaban esperando para que continúen.