Notas de estudio de subprocesos múltiples (3) grupo de subprocesos de subprocesos múltiples

Introducción

Cuando una empresa tiene una gran cantidad de simultaneidad, se debe utilizar el subproceso múltiple, y cuando se ejecutan programas ordinarios de subproceso múltiple, irá acompañado de una gran cantidad de creación y destrucción de subprocesos repetidos. Estas tareas informáticas repetidas e innecesarias aumentarán la complejidad del programa. no se ajusta a la orientación principal de la programación de computadoras. Con el fin de mejorar la eficiencia del uso de la computadora, los predecesores de los mayores propusieron utilizar el grupo de subprocesos, que evita la creación repetida y la destrucción de subprocesos en cierta medida, lo que mejora enormemente La eficiencia y robustez de ejecución del programa.

Introducción y uso del grupo de subprocesos

¿Qué es un grupo de subprocesos?

  • Como su nombre lo indica, el grupo de subprocesos es un "grupo" que contiene subprocesos, es decir, un contenedor que puede contener varios programas de subprocesos múltiples. La ventaja de esto es que puede evitar la sobrecarga de cerrar y abrir subprocesos repetidamente durante la ejecución de programas multiproceso Reducir en gran medida la complejidad del tiempo del programa, y ​​el precio es aumentar el programa un poco de complejidad de espacio.

Principio de Thread Pool

  • El principio del grupo de subprocesos es muy simple. Primero, cree un grupo de subprocesos. El grupo de subprocesos contiene varios subprocesos. Cuando hay varios fragmentos de tareas para ejecutar en el sistema, el fragmento de la tarea actual puede coincidir con los subprocesos en el subproceso pool. Si la tarea es exitosa El fragmento de tarea se puede ejecutar obteniendo el objeto hilo. El diagrama esquemático de este proceso es el siguiente:
    Inserte la descripción de la imagen aquí
  • Si se completa la ejecución de la tarea, el sistema devolverá automáticamente los recursos del subproceso En la figura anterior, las tareas 3 y 4 no han obtenido recursos del subproceso y deben esperar en línea.
  • El grupo de subprocesos se compone de colecciones, y las colecciones comunes en Java incluyen ArrayList, HashSet, LinkList y HashMap. Según las características de estas colecciones, la colección más adecuada para contenedores de grupos de subprocesos es LinkList. El diagrama esquemático de la implementación de LinkList del subproceso la piscina se muestra a continuación.
    Inserte la descripción de la imagen aquí

Caja de hilo para piscina

Después de la versión jdk1.5, jdk incluye la clase de grupo de subprocesos, que está unificada en el paquete java.util.concurrent. Si desea utilizar el grupo de subprocesos, puede importar directamente el paquete. Al igual que en las notas anteriores, Xiao Yuan también usa el caso de compra de boletos en esta nota. El siguiente es el código de caso de Xiao Yuan.
Clase de implementación de interfaz ejecutable:

public class MyRunnableImpl implements Runnable{
    private static int ticket =100;
    private  int ticket2 =500;
    private  static volatile boolean sellOutFlag=false;
    private   String name;
    public MyRunnableImpl() {

    }
    public MyRunnableImpl(String name) {
        this.name = name;
    }
    @Override
    public void run() {

        while (!sellOutFlag) {
            sellTicketStatic();
            //sellTicket();
        }
    }
    //锁对象是自己
    private synchronized void sellTicket() {
            if(ticket>0){
                //System.out.println(this.name+"正在卖出第:"+ticket+"张票");
                System.out.println(Thread.currentThread().getName()+"正在卖出第:"+ticket+"张票");
                //所以打印出来会连续减三
                ticket --;
                //System.out.println(name+"正在卖出第:"+ticket+"张票");
                try {
                    Thread.sleep(20);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }else {
                sellOutFlag = true;
            }
    }
    //锁对象是MyRunnableImpl类
    public  static synchronized void sellTicketStatic(){

            if(ticket>0){
                //System.out.println(this.name+"正在卖出第:"+ticket+"张票");
                //System.out.println(name+"正在卖出第:"+ticket+"张票");
                System.out.println(Thread.currentThread().getName()+"正在卖出第:"+ticket+"张票");
                ticket --;
                try {
                    Thread.sleep(20);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }else {
                sellOutFlag = true;
            }
    }
}

Clase de prueba

public class ThreadPoolDemoTest {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(3);
        executorService.submit(new MyRunnableImpl("窗口一"));
        executorService.submit(new MyRunnableImpl("窗口二"));
        executorService.submit(new MyRunnableImpl("窗口三"));
        executorService.shutdown();
    }
}

Resultados de la prueba
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

para resumir

En el código anterior, Xiaoyuan fijó el número de grupos de subprocesos en 3, y 3 grupos de subprocesos también pueden acomodar 3 subprocesos para ejecutarse, por lo que el resultado de la prueba tendrá la condición de que los tres subprocesos estén comprando boletos y cuando cambiemos el número de grupos de subprocesos Cuando se fija en 2, de acuerdo con el principio, debería haber solo dos subprocesos vendiendo boletos. En cuanto a la prueba específica. Xiao Yuan recomienda que todos los estudiantes tomen la prueba en su tiempo libre.

Supongo que te gusta

Origin blog.csdn.net/xueshanfeitian/article/details/106671652
Recomendado
Clasificación