Dos advertencias con @Async

ejemplo:

@Async
public void test() {
    log.info("test");
}
复制代码

No usar Spring Boot

Un punto de interrupción muestra que el valor predeterminado es org.springframework.core.task.SimpleAsyncTaskExecutor

imagen.png

Como su nombre lo indica, esto es muy simple, observe el código fuente y comience el método de ejecución: cada ejecución agregará un nuevo hilo, y en el caso de alta concurrencia, los hilos se crearán infinitamente, y las consecuencias se pueden imaginar.

protected void doExecute(Runnable task) {
    Thread thread = this.threadFactory != null ? this.threadFactory.newThread(task) : this.createThread(task);
    thread.start();
}
复制代码

Uso de Spring Boot

org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration configurará automáticamente org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor (solo en Spring Boot 2)

Sin embargo, la cola utilizada por este grupo de subprocesos es LinkedBlockingQueue, que es una cola ilimitada. Cuando la simultaneidad es alta, todas las tareas entran en la cola, lo que puede causar un desbordamiento de contenido.

usar correctamente

Personalice el grupo de subprocesos de acuerdo con la situación empresarial: www.cnblogs.com/duanxz/p/60…

Supongo que te gusta

Origin juejin.im/post/7078544630614065188
Recomendado
Clasificación