Tabla de contenido
Dos formas de usar el grupo de subprocesos para subprocesos múltiples (generalmente use el segundo)
Nota: intente no crear el grupo de subprocesos en el proyecto (no lo cree en la lógica empresarial), de modo que cada vez que se llame a este método, se creará un grupo de subprocesos, que debe crearse cuando se inicia el proyecto.
Crear un grupo de subprocesos
Cree una clase ThreadPoolConfig en la configuración (nombre de clase personalizado)
Agregue @Configuration: dígale a Spring que esta es una clase de configuración que debe cargarse al inicio
@Bean public static ExcutorService getExecutor(){ //ExcutorService线程池 }
El significado aquí es: cree este método de esta clase al inicio, este método devolverá un objeto y entregará este objeto a Spring para su administración
Crear objeto
El primero es usar el método set para asignar valores, y el segundo es usar el constructor para asignar valores.
@Data: nota sobre la clase, proporcione los métodos get, set, equals, hashCode, canEqual, toString de la clase
@AllArgsConstructor: nota sobre la clase, que proporciona la construcción completa de parámetros de la clase
@NoArgsConstructor: nota sobre la clase, que proporciona la construcción sin argumentos de la clase
(estos dos son equivalentes)
Crear un grupo de subprocesos
Parámetros en la clase ExecutorBuilder
Estos valores mágicos se pueden colocar en el archivo de configuración, o puede escribir una constante aquí, el archivo de configuración se selecciona aquí (Nota: los archivos de configuración generalmente están en minúsculas)
o
Creación de grupo de subprocesos
Los significados de los parámetros aquí son: el número de subprocesos principales, el número máximo de subprocesos, el tiempo de supervivencia del subproceso (se reciclará después de un largo tiempo sin trabajo) y la estrategia de rechazo (hay una clase ThreadPoolExcutor que pone específicamente la estrategia de rechazo) (aquí está configurado para permitir que el subproceso principal se ejecute), cola (aquí el tamaño de la cola es 2000), prefijo del subproceso, permitir el tiempo de espera del subproceso principal
Porque ya le dimos a Spring para administrar cuando lo creamos, así que cuando lo usamos, podemos ir a Spring para obtenerlo (igual que la interfaz)
Dos formas de usar el grupo de subprocesos para subprocesos múltiples (generalmente use el segundo)
El primer tipo: anotación asíncrona @Asyc
Asigne un nombre al objeto de grupo de subprocesos creado por Spring
El segundo tipo: clase CompletableFuture proporcionada por jdk1.8
(El significado aquí es: iniciar una tarea asincrónica, lanzar esta tarea en el grupo de subprocesos ExcutorService para ejecutar)
Aquí hay dos casos
Una situación es entregar la tarea al grupo de subprocesos, sin prestar atención a la ejecución de la tarea. La tarea se entrega al grupo de subprocesos y el subproceso principal se libera (principalmente aplicable a algunas operaciones de actualización); en otro caso, después de que la tarea se entrega al grupo de subprocesos, el subproceso principal se bloquea y espera la consulta resultados. (Principalmente aplicable a: la necesidad de consultar la base de datos en un bucle for; la necesidad de llamar a la consulta de la interfaz http en un bucle; el propio método es muy complicado y necesita consultar la base de datos muchas veces)
lograr:
Aquí hay tres métodos
Lanzar tareas al grupo de subprocesos para su uso
Bloquee antes de que se complete la tarea (no lo agregue si no le importa el valor de retorno)