Java高并发编程实战5,异步注解@Async自定义线程池

Async注解的作用是异步处理任务。在使用@Async时,如果不指定线程池的名称,默认线程池是Spring默认的线程池SimpleAsyncTaskExecutor。默认线程池的配置如下:从最大线程数可以看出,在并发情况下,会无限制地创建线程。也可以通过yml重新配置:也可以自定义线程池,下面通过简单的代码来实现@Async自定义线程池。
Java高并发编程实战5,异步注解@Async自定义线程池
@Async注解的作用是异步处理任务。

在使用@Async时,如果不指定线程池的名称,默认线程池是Spring默认的线程池SimpleAsyncTaskExecutor。

默认线程池的配置如下:

从最大线程数可以看出,在并发情况下,会无限制地创建线程。

也可以通过yml重新配置:

也可以自定义线程池,下面通过简单的代码来实现@Async自定义线程池。

二、代码实例

导入POM

配置类AsyncTaskConfig

UserController

UserService

UserServiceImpl

三、为什么在文件内执行异步任务,还是一个线程,没有实现@Async效果?

在众多尝试中,找到了@Async失效的几个原因:

四、配置中使用了ThreadPoolTaskExecutor和ThreadPoolExecutor,这两个有什么区别?

ThreadPoolTaskExecutor是spring core包中的,而ThreadPoolExecutor是JDK中的JUC。

1、initialize()

查看ThreadPoolTaskExecutor的initialize()方法

2、initializeExecutor抽象方法

再查看initializeExecutor抽象方法的具体实现类,其中有一个就是ThreadPoolTaskExecutor类,查看它的initializeExecutor方法,使用的就是ThreadPoolExecutor。

因此可以了解到ThreadPoolTaskExecutor是对ThreadPoolExecutor进行了封装。

五、核心线程数

配置文件中的线程池核心线程数为何配置为Runtime.getRuntime().availableProcessors()?

获取的是CPU核心线程数,也就是计算资源。

在实际中,需要对具体的线程池大小进行调整,可以通过压测及机器设备现状,进行调整大小。如果线程池太大,则会造成CPU不断的切换,对整个系统性能也不会有太大的提升,反而会导致系统缓慢。

六、线程池执行流程2024-08-09
mengvlog 阅读 45 次 更新于 2025-10-30 05:22:19 我来答关注问题0
  •  深空见闻 java实现异步的方式

    Java实现异步的方式有多种,主要包括使用Thread类、Runnable接口、Callable接口、Future和ExecutorService、CompletableFuture以及Spring的@Async注解。1. 使用Thread类 通过继承Thread类并重写其run()方法来实现异步操作。在run()方法中编写需要异步执行的代码,然后创建Thread类的实例并调用其start()方法来启动新...

  •  文暄生活科普 Java | 一分钟掌握异步编程 | 2 - 异步的实现方式

    1. 线程异步 线程异步是最直接、最简单的异步实现方式。它将任务分配给多个线程,使原本串行的操作转化为并行操作,从而提高处理效率。实现方式:通常使用java.lang.Thread和java.lang.Runnable接口来创建线程,并启动线程执行任务。如果任务较多,可以使用线程池java.util.concurrent.ThreadPoolExecutor来管理线...

  •  文暄生活科普 Java实现异步编程的8种方式

    4.4 Spring的@Async异步:Spring框架提供了一个方便的机制来实现异步任务执行,通过@Async注解标注方法,Spring会自动将此方法提交给线程池执行。在实际项目中,推荐使用自定义线程池,避免直接使用@Async注解。4.5 Spring ApplicationEvent事件实现异步:利用Spring的事件机制,可以实现异步响应。当程序出现异常...

  •  翡希信息咨询 Java 异步编程的几种方式

    Java中实现异步编程的几种方式如下:使用Thread类:简介:最简单直接的方式,通过创建一个Thread对象来执行异步任务。特点:在Java 8以上版本,可以使用Lambda表达式简化代码。但这种方式存在线程管理问题和并发控制问题,适用于简单示例,生产环境需谨慎使用。使用FutureTask类:简介:JDK 1.5引入,实现了Future...

  • 实现异步任务的分发和处理。ThreadUtil异步工具类提供了一系列的异步操作方法,简化了异步编程的实现。而Guava ListenableFuture接口则是对java原生Future接口的扩展,可以监听异步任务的完成状态,避免了需要不断查询异步计算结果的复杂性,提高了并发程序的效率和可维护性。

檬味博客在线解答立即免费咨询

编程相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部