Explicación detallada del uso del grupo de subprocesos de Java

En los artículos anteriores, Xiaoqian explicó a sus amigos qué es un hilo y varias formas de crear un hilo. Aquí es donde mi amigo preguntó, el grupo de subprocesos es el más utilizado en nuestro trabajo, Xiaoqian, ¿puedes contarnos más sobre el grupo de subprocesos? Ahora que los amigos han planteado sus necesidades, Xiaoqian, tengo que satisfacer a todos. ¡Hoy hablaré sobre el grupo de hilos para los amigos!

imagen

 1. Grupo de subprocesos

1. ¿Qué es un grupo de subprocesos?

En la programación orientada a objetos, crear y destruir objetos requiere mucho tiempo, porque crear un objeto requiere más recursos de memoria y otros recursos. Esto es aún más cierto en Java, donde la máquina virtual intenta realizar un seguimiento de cada objeto para que pueda ser recolectado como basura después de que se destruya el objeto. Una forma de mejorar la eficiencia de los programas de servicio es reducir la cantidad de creación y destrucción de objetos tanto como sea posible, especialmente los procesos de creación y destrucción de objetos que consumen una gran cantidad de recursos. Esta es la razón de la tecnología de "recursos compartidos".

El grupo de subprocesos, como su nombre indica, consiste en crear varios subprocesos ejecutables por adelantado y colocarlos en un grupo (contenedor). Cuando los necesitemos, podemos obtener subprocesos directamente del grupo sin crearlos nosotros mismos. Después de usarlos, no es necesario destruir los subprocesos, sino volver a colocarlos en el grupo, lo que reduce la sobrecarga de creación y destrucción de objetos de subprocesos.

El papel del grupo de subprocesos

La existencia del grupo de subprocesos reduce la cantidad de subprocesos creados y destruidos, y cada subproceso de trabajo se puede reutilizar para realizar múltiples tareas. Además, podemos ajustar la cantidad de subprocesos de trabajo en el grupo de subprocesos según la capacidad del sistema para evitar que el servidor se agote debido a un consumo excesivo de memoria.

Cómo crear un grupo de subprocesos

También hay muchas formas de crear grupos de subprocesos, cada uno de los cuales corresponde a diferentes escenarios de uso. En términos generales, la creación de grupos de subprocesos se puede dividir en las siguientes dos categorías:

El primero es crear manualmente un grupo de subprocesos a través de ThreadPoolExecutor;

El segundo es crear automáticamente un grupo de subprocesos a través de Ejecutores.

3.1 Ejecutor de grupo de subprocesos

ThreadPoolExecutor es la forma más básica y recomendada de crear manualmente un grupo de subprocesos. Puede proporcionar hasta 7 configuraciones de parámetros al crearlo. Un ejemplo del uso de ThreadPoolExecutor es el siguiente:

// 创建线程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 10, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10));
// 执行任务
for (int i = 0; i < 10; i++) {
    int index = i;
    threadPool.execute(() -> {
        System.out.println(index + " 被执行,线程名:" + Thread.currentThread().getName());
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    });
}

El resultado de la ejecución del programa anterior se muestra en la siguiente figura:

3.2 Ejecutores

A través de la creación automática de grupos de subprocesos por parte de los Ejecutores, tenemos los siguientes métodos de implementación:

Executors.newFixedThreadPool

Cree un grupo de subprocesos con un tamaño fijo, que pueda controlar la cantidad de subprocesos simultáneos, y el exceso de subprocesos esperará en la cola.

Executors.newCachedThreadPool

Cree un grupo de subprocesos almacenable en caché. Si el número de subprocesos supera los requisitos de procesamiento, la memoria caché se reciclará después de un período de tiempo. Si el número de subprocesos no es suficiente, se crearán nuevos subprocesos.

Ejecutores.nuevoSingleThreadExecutor

Cree un grupo de subprocesos con un solo número de subprocesos, lo que puede garantizar el orden de ejecución de primero en entrar, primero en salir.

Executors.newScheduledThreadPool

Cree un grupo de subprocesos que pueda ejecutar tareas retrasadas.

Ejecutores.nuevoSingleThreadScheduledExecutor

Cree un grupo de subprocesos de un solo subproceso que pueda ejecutar tareas retrasadas.

Ejecutores.newWorkStealingPool

Cree un grupo de subprocesos para la ejecución preventiva (el orden de ejecución de la tarea es incierto)

Los anteriores son varios métodos de implementación de actuadores. Si desea conocer más detalles, puede enviar un mensaje privado a Xiaoqian. ¡Boge puede responderle con más detalle!

imagen

 2. Resumen

A través de la explicación de Xiaoqian hoy, no sé si los amigos tienen alguna comprensión de la función del grupo de subprocesos y cómo crearlo manualmente. Además, en el manual de desarrollo de Java de Alibaba, sus empleados internos se ven obligados a crear grupos de subprocesos manualmente, lo que muestra los beneficios de crear grupos de subprocesos manualmente.

Supongo que te gusta

Origin blog.csdn.net/GUDUzhongliang/article/details/132065792
Recomendado
Clasificación