¿Cómo crear un hilo en Java? | Multiproceso en Java
Publicado: 2020-12-29En este artículo, echaremos un vistazo a la creación de subprocesos en Java y exploraremos los mecanismos que hacen posible la creación de subprocesos.
Tabla de contenido
Enhebrar en Java
La función de subprocesamiento en Java es un subproceso ligero. Se considera que es la unidad de procesamiento más pequeña. Es un medio para lograr la multitarea en un programa. Es una característica útil cuando se trata de juegos, animación, etc.
Java tiene soporte incorporado para crear subprocesos y subprocesos múltiples. Este es un enfoque inteligente para minimizar las ineficiencias y la carga mediante la utilización óptima del espacio de la CPU. En Java, esto se puede hacer de dos maneras:
- Ampliar clase de subproceso, o
- Implementar interfaz ejecutable
Cuando más de un subproceso se ejecuta simultáneamente, se denomina multiproceso. Básicamente, esto permite que varias partes de un programa se ejecuten simultáneamente, cada parte de un subproceso y cada subproceso sigue una ruta distinta de ejecución.
Los subprocesos utilizan espacio de memoria compartido; la memoria no se asigna a cada parte, lo que resulta en un uso máximo de la CPU. Además, cambiar los contextos no requiere mucho tiempo. Sin embargo, demasiados subprocesos podrían involucrar a su CPU en un cambio de contexto y su ejecución podría retrasarse.
Un subproceso puede existir en uno de los siguientes seis estados
- NUEVO: tan pronto como se crea un hilo, existe en el nuevo estado. Esencialmente significa que el subproceso aún no ha comenzado a ejecutarse.
- EN EJECUCIÓN: cuando un subproceso se está ejecutando o está en línea para ejecutarse, se encuentra en estado de ejecución.
- EN ESPERA: un subproceso en ejecución a veces se detiene o suspende para permitir que ocurra otra actividad. Una versión sin tiempo de espera de wait() o join() puede suspender la ejecución de un subproceso. Una vez que se ha producido la acción, se reanuda un hilo suspendido.
- TIMED-WAITING: un subproceso en ejecución a veces se detiene temporalmente o se suspende por una duración específica. Por ejemplo, cuando se llama a la función sleep().
- BLOQUEADO: cuando un subproceso de Java suspendido no puede adquirir un recurso en particular, se bloquea y existe en el estado bloqueado.
- TERMINADO: cuando un subproceso completó su ejecución, existe en el estado terminado. Sin embargo, puede terminar un hilo en cualquier momento.
Obtenga más información sobre la arquitectura y los componentes de Java.

Beneficios de crear un hilo en Java
Hay varias ventajas en la creación de hilos. Algunos de estos son
- Dado que los subprocesos son independientes, una ejecución no afecta a otra, incluso cuando operan en el espacio de memoria compartida. Esto también significa que puede realizar más de una operación simultáneamente.
- Threading es una forma de multitarea y ahorra tiempo.
- Un error en un hilo no afecta a otro.
¿Cómo crear un hilo en Java?
Como se discutió anteriormente, hay dos formas de hacer esto: Extender la clase de hilo o implementar la interfaz ejecutable
Clase de hilo
Hay constructores y métodos en la clase Thread que le permiten realizar operaciones, administrar y realizar un seguimiento de los hilos. Extiende la clase Object que luego implementa la interfaz Runnable complementaria. Los constructores presentes en la clase de hilo son: Thread(), Thread(String name), Thread(Runnable r) y Thread(Runnable r, String name).
Los siguientes son los métodos y sus descripciones.

| Método | ¿Para qué se usa? |
| comienzo() | Comienza la ejecución |
| correr() | Para ejecutar una acción para un hilo |
| dormir() | Pone un hilo a dormir por una duración dada |
| unirse() | Espere hasta que se termine otro hilo |
| obtenerPrioridad() | Para indicar la prioridad de un hilo dado |
| fijar prioridad() | Para alterar la prioridad de un hilo dado |
| obtenerNombre() | Para devolver el nombre de un subproceso especificado |
| escoger un nombre() | Para cambiar el nombre del hilo especificado |
| obtenerId() | Para devolver el ID de un hilo dado |
| está vivo() | Para probar si un hilo todavía existe en cualquiera de los estados |
| producir() | Pausa la ejecución de un objeto de subproceso para permitir que se ejecuten otros subprocesos |
| suspender() | Para suspender un hilo dado |
| reanudar() | Para reanudar un hilo desde el estado suspendido |
| detener() | Para detener un hilo dado |
| destruir() | Para destruir grupos y subgrupos de subprocesos |
| interrumpir() | Para causar una interrupción en la ejecución del subproceso |
| se interrumpe() | Para probar si la ejecución de un subproceso determinado se interrumpe |
| interrumpido() | Para probar si la ejecución del subproceso actual se interrumpe |
| cuentaActiva() | Para devolver el recuento de subprocesos activos en un grupo de subprocesos |
| holdLock() | Devuelve verdadero si y solo si el subproceso actual mantiene el bloqueo del monitor en el objeto especificado. |
| obtenerEstado() | Para determinar el estado de un hilo dado |
| setContextClassLoader() | Para establecer el contexto ClassLoader |
| getContextClassLoader() | Para devolver el contexto ClassLoader |
Para crear un hilo extendiendo la clase Thread, primero se debe crear una clase que amplíe la clase java.lang.Thread. Esta clase está definida para anular el método run(). A continuación, se crea un objeto en la nueva clase que sigue llamando al método start() para comenzar la ejecución del subproceso.
Debe leer: Programas de patrones en Java que debe verificar
Interfaz ejecutable
Esta es la forma más fácil de crear un hilo. Solo se requiere un método para implementar la interfaz ejecutable: ejecutar ()
Para declararlo, escribimos
ejecución de vacío público ()

Dentro de run(), procedemos a escribir el código para crear un nuevo hilo.
Inscríbase en cursos de ingeniería de software de las mejores universidades del mundo. Obtenga programas Executive PG, programas de certificados avanzados o programas de maestría para acelerar su carrera.
Clase de subproceso frente a interfaz ejecutable
La clase Thread le impide extender cualquier otra clase. Esto se debe a que la herencia múltiple no es posible en Java. Sin embargo, este no es el caso cuando implementamos la interfaz Runnable donde continúa extendiendo otras clases.
Extender la clase Thread pone a su disposición varios métodos importantes que mejoran la funcionalidad de un hilo. Por ejemplo, yield(), stop(), isalive(), interrupt(). La interfaz Runnable solo tiene un método que es bastante limitante.
Terminando
Si está interesado en obtener más información sobre Java, desarrollo de software de pila completa, consulte el programa Executive PG de upGrad & IIIT-B en desarrollo de software de pila completa, que está diseñado para profesionales que trabajan y ofrece más de 500 horas de capacitación rigurosa, 9+ proyectos y asignaciones, estado de exalumno de IIIT-B, proyectos finales prácticos prácticos y asistencia laboral con las mejores empresas.

