千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  Spring框架下ThreadPoolTaskExecutor线程池的使用

Spring框架下ThreadPoolTaskExecutor线程池的使用

来源:千锋教育
发布人:lxl
时间: 2023-03-03 15:47:56

  一. 问题阐述

  最近一个已经参加工作的学生,要给他们公司迭代开发一个营销活动,其中有一个功能是:当运营人员录入一次活动的同时,需要给这次活动生成一定数量的礼品兑换券。

  这个学生,虽然把这个功能实现了,但效果却不尽理想,于是他就跑来咨询我该怎么进行优化。结合他这个项目的实际场景,考虑到要生成大数量礼品券的过程比较耗时,决定把生成礼品券的逻辑使用线程进行异步执行。

  最终选择使用Spring下的线程池工具类ThreadPoolTaskExecutor来创建线程,经过这样一番技术优化后,帮这个学生完满完成了他们公司布置的任务。那么接下来就给大家介绍一下刚才提到的ThreadPoolTaskExecutor的使用方法和注意事项。

  二. 快速使用

  1. 创建项目入口类

  首先我们创建一个入口类,并在该入口类上添加@EnableAsync注解。

图片1

  2. 编写业务方法

  接下来我们把需要异步执行的业务逻辑单独抽取成一个方法,在方法上也加上@Async注解。

图片2

  3. 编写junit单元测试

  接下来我们就编写一个单元测试类,对上面编写好的业务代码进行调用测试。

图片3

  三. 程序优化

  从上面的测试结果中我们不难看出,在Spring下我们要使用线程池其实非常的简单,只需在要异步调用的方法上加上@Async注解即可。以后调用该方法时,Spring就会自动使用默认的线程池,创建一个线程异步调用该方法。

  但这样做会不会有什么问题呢?有没有我们需要优化的点呢?

  答案是肯定的!Spring默认使用的Executor bean,和我们使用JDK中的Executors创建的线程池一样,都存在着阻塞队列的长度过长,可能会堆积大量的请求,从而导致OOM的问题。所以为了规避资源耗尽,我们一般会自己配置Executor bean(具体描述参照阿里巴巴开发规范1.4版),具体优化代码如下:

图片4

  配置了自定义的Executor bean 之后,我们再次运行测试case,发现运行结果如下:

图片5

  线程池在Java中一直都是一个非常重要的知识点,我们在面试中也会经常遇到这方面的题,希望大家好好掌握这里面的基础知识。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的输入语句—— Scanner类

2023-05-04

java数据库操作常识事务的四大特性

2023-05-04

DML数据操作之增加或删除数据

2023-05-04

最新文章NEW

socket是什么?有什么作用?

2023-05-04

Java常量定义是什么

2023-04-28

一分钟带你学多线程

2023-04-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>