¿Qué son los hilos o Threads?

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 extiende Thread y sobrescribe el método run().
  • Implementar la interfaz Runnable: Es la opción más flexible. La clase implementa el método run() de la interfaz. Luego, se crea un objeto Thread pasando 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étodo run().
  • Estado de vida (t1.isAlive()): Devuelve true si 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 con stop(), el hilo no puede volver a arrancarse con start().

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.