下面是一个完整的使用@Async注解的线程池案例:

  1. 首先,在 Spring Boot 的启动类上添加@EnableAsync注解来启用异步处理功能。
@SpringBootApplication
@EnableAsync
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  1. 创建一个异步任务类,使用@Async注解来标记该方法为异步方法。在异步任务类中,我们可以使用ThreadPoolTaskExecutor来创建一个线程池。
@Component
public class AsyncTask {

    private static final Logger logger = LoggerFactory.getLogger(AsyncTask.class);

    private final ThreadPoolTaskExecutor taskExecutor;

    public AsyncTask(ThreadPoolTaskExecutor taskExecutor) {
        this.taskExecutor = taskExecutor;
    }

    @Async
    public void doAsyncTask() {
        logger.info('Start async task');

        // 模拟耗时操作
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        logger.info('Async task completed');
    }
}
  1. 在需要异步执行的地方调用异步任务。
@RestController
public class MyController {

    private final AsyncTask asyncTask;

    public MyController(AsyncTask asyncTask) {
        this.asyncTask = asyncTask;
    }

    @GetMapping('/async-task')
    public String asyncTask() {
        asyncTask.doAsyncTask();
        return 'Async task started';
    }
}

在上面的例子中,当访问/async-task接口时,会启动一个异步任务doAsyncTask。该任务会在线程池中异步执行,而不会阻塞主线程。

注意,需要在pom.xml文件中添加相关依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-task</artifactId>
</dependency>

以上就是一个完整的使用@Async注解的线程池案例。通过使用@Async注解,我们可以方便地实现异步执行任务,提高系统的并发能力。

Spring Boot @Async 注解实现线程池异步任务 | 完整案例

原文地址: http://www.cveoy.top/t/topic/qwRB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录