Show Me More!!!✨|

Journey&Flower

园龄:7年3个月粉丝:40关注:121

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 等更高级的工具,以获得更精细的线程

本文作者:Journey&Flower

本文链接:https://www.cnblogs.com/JourneyOfFlower/p/18091180

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Journey&Flower  阅读(87)  评论(0编辑  收藏  举报
历史上的今天:
2021-03-23 Cron表达式周/星期/天时无效报错失败
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 Not Found REOL
  2. 2 白色恋人 游鸿明
  3. 3 盛夏的果实 莫文蔚
  4. 4 以父之名 周杰伦
  5. 5 晴天 周杰伦
  6. 6 简单爱 周杰伦
  7. 7 东风破 周杰伦
  8. 8 稻香 周杰伦
  9. 9 爱在西元前 周杰伦
  10. 10 千里之外 费玉清-周杰伦
  11. 11 偏爱 张芸京
  12. 12 大海 张雨生
  13. 13 月亮惹的祸 张宇
  14. 14 雨一直下 张宇
  15. 15 过火 张信哲
  16. 16 隐形的翅膀 张韶涵
  17. 17 天下 张杰
  18. 18 当你孤单你会想起谁 张栋梁
  19. 19 清明雨上 许嵩
  20. 20 玫瑰花的葬礼 许嵩
  21. 21 断桥残雪 许嵩
  22. 22 城府 许嵩
  23. 23 等一分钟 徐誉滕
  24. 24 客官不可以 徐良_小凌
  25. 25 坏女孩 徐良_小凌
  26. 26 犯贱 徐良
  27. 27 菠萝菠萝蜜 谢娜
  28. 28 贝多芬的悲伤 萧风
  29. 29 睫毛弯弯 王心凌
  30. 30 我不是黄蓉 王蓉
  31. 31 秋天不回来 王强
  32. 32 今天你要嫁给我 陶喆,蔡依林
  33. 33 丁香花 唐磊
  34. 34 绿光 孙燕姿
  35. 35 求佛 誓言
  36. 36 十一年 邱永传
  37. 37 下辈子如果我还记得你 马郁
  38. 38 一千年以后 林俊杰
  39. 39 江南 林俊杰
  40. 40 曹操 林俊杰
  41. 41 背对背拥抱 林俊杰
  42. 42 会呼吸的痛 梁静茹
  43. 43 勇气 梁静茹
  44. 44 爱你不是两三天 梁静茹
  45. 45 红日 李克勤
  46. 46 星月神话 金莎
  47. 47 嘻唰唰 花儿乐队
  48. 48 穷开心 花儿乐队
  49. 49 六月的雨-《仙剑奇侠传》电视剧插曲 胡歌
  50. 50 一个人的寂寞两个人的错 贺一航
  51. 51 好想好想-《情深深雨濛濛》电视剧片尾曲 古巨基
  52. 52 情人 刀郎
  53. 53 冲动的惩罚 刀郎
  54. 54 西海情歌 刀郎
  55. 55 2002年的第一场雪 刀郎
  56. 56 红玫瑰 陈奕迅
  57. 57 浮夸 陈奕迅
  58. 58 爱情转移 陈奕迅
  59. 59 独家记忆 陈小春
  60. 60 记事本 陈慧琳
  61. 61 看我72变 蔡依林
  62. 62 寂寞在唱歌 阿桑
  63. 63 樱花草 Sweety
  64. 64 中国话 S.H.E
  65. 65 波斯猫 S.H.E
  66. 66 杀破狼-《仙剑奇侠传》电视剧片头曲 JS
  67. 67 Lydia F.I.R.
  68. 68 I Miss You 罗百吉_青春美少女.
盛夏的果实 - 莫文蔚
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 李焯雄

作曲 : Meyna Co

编曲 : 张佳添

也许放弃 才能靠近你 不再见你

你才会把我记起 时间累积

这盛夏的果实 回忆里寂寞的香气

我要试着离开你 不要再想你

虽然这并不是我本意

你曾说过 会永远爱我

也许承诺 不过因为没把握 别用沉默

再去掩饰什么 当结果是那么赤裸裸

以为你会说什么 才会离开我

你只是转过头 不看我

不要刻意说 你还爱我

当看尽潮起潮落 只要你记得我

你曾说过 会永远爱我 也许承诺

不过证明没把握 不用难过

不用掩饰什么 当结果是那么赤裸裸

其实不必说什么

才能离开我 起码那些经过 属于我

也许放弃 才能靠近你 不再见你

你才会把我记起 时间累积

这盛夏的果实 回忆里爱情的香气

我以为不露痕迹 思念却满溢

或许这代表了我的心

不要刻意说 你还爱我

当看尽潮起潮落 只要你记得我

如果你会梦见我 请你再抱紧我