java&springboot开发异步线程池写法和配置

在 Java 和 SpringBoot 中,异步和并发编程是两个重要的概念,用于提高应用程序的性能和响应能力。为了简化这些操作,提供了各种注解和类来帮助开发人员管理线程。

本博客文章将概述 Java 和 SpringBoot 中常用的异步/并发线程注解和使用类,并简要介绍它们各自使用的线程池。

1. @Async 注解

@Async 注解是 Spring 提供的用于声明异步方法的注解。当方法上添加此注解时,它将由 Spring 异步执行,这意味着它不会阻塞调用线程。

@Service
public class MyService {

    @Async
    public void asyncTask() {
        // 此任务将异步执行
        System.out.println("执行异步任务...");
    }
}

使用的线程池:

@Async 注解默认使用 Spring 配置的 TaskExecutor 实例。如果未明确配置,则 Spring 将使用默认的 SimpleAsyncTaskExecutor,它使用一个固定大小的线程池。

需要注意:@Async 注解默认在当前类的方法调用在当前类的@Async方法时,并不能开启异步,此时我们可以使用 applicationContext.getBean(beanName)获取下当前bean,调用下,即可开启异步。

2. @EnableAsync 注解

@EnableAsync 注解用于启用 Spring 对异步方法的支持。它通常在 Spring 配置类中使用,以确保 TaskExecutor Bean 被创建并注册。

@Configuration
@EnableAsync
public class AppConfig {

    @Bean
    public TaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(10);
        executor.setQueueCapacity(200);
        executor.setThreadNamePrefix("My-Task-");
        return executor;
    }
}

使用的线程池:

@EnableAsync 注解本身不会创建线程池。但是,它会触发 Spring 创建默认的 TaskExecutor 实例,如果未明确配置,则会使用 SimpleAsyncTaskExecutor

3. ExecutorService 接口

ExecutorService 接口是 Java 提供的用于管理线程池的标准接口。它提供了多种方法来创建和管理线程池,并提交要执行的任务。

ExecutorService executorService = Executors.newFixedThreadPool(5);

executorService.submit(() -> {
    // 此任务将在由 executorService 管理的线程池中执行
    System.out.println("执行任务...");
});

executorService.shutdown();

使用的线程池:

ExecutorService 接口本身不提供线程池。相反,它提供了用于创建和管理线程池的方法,例如 newFixedThreadPoolnewCachedThreadPool

4. CompletableFuture

CompletableFuture 类是 Java 8 中引入的用于表示异步计算的未来结果的类。它提供了多种方法来组合和处理异步操作。

CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {
    // 此任务将异步执行
    System.out.println("执行任务...");
    return null;
});

future.thenAccept(result -> {
    // 在任务完成后执行此操作
    System.out.println("任务完成...");
});

使用的线程池:

CompletableFuture 类本身不提供线程池。但是,它提供了 supplyAsyncthenAcceptAsync 等方法,这些方法会自动将任务提交到默认的 ForkJoinPool 或自定义的 Executor

5. Spring @SpringBootApplication 注解

@SpringBootApplication 注解是 SpringBoot 提供的用于简化 Spring Boot 应用配置的注解。它包含了其他几个注解的功能,包括 @EnableAsync,因此默认情况下会启用对异步方法的支持。

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

使用的线程池:

@SpringBootApplication 注解会触发 Spring 创建默认的 TaskExecutor 实例,如果未明确配置,则会使用 SimpleAsyncTaskExecutor

总结

Java 和 SpringBoot 提供了多种注解和类来简化异步和并发编程。选择合适的工具取决于您的具体需求和应用程序的性能要求。

以下是一些额外的提示:

  • 谨慎使用 @Async 注解,避免在调用线程上执行耗时操作。
  • 使用 @EnableAsync 注解显式启用异步支持,并根据需要配置 TaskExecutor
  • 考虑使用 ExecutorServiceCompletableFuture 等更高级的工具,以获得更精细的线程
posted @ 2024-03-23 15:28  Journey&Flower  阅读(164)  评论(0)    收藏  举报