springboot线程池的使用方式1
- 一类是通过 ThreadPoolExecutor 创建的线程池;
- 另一个类是通过 Executors 创建的线程池。
- ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。
- LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列。
- SynchronousQueue:一个不存储元素的阻塞队列,即直接提交给线程不保持它们。
- PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。
- DelayQueue:一个使用优先级队列实现的无界阻塞队列,只有在延迟期满时才能从中提取元素。
- LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。与SynchronousQueue类似,还含有非阻塞方法。
- LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
- AbortPolicy:拒绝并抛出异常。
- CallerRunsPolicy:使用当前调用的线程来执行此任务。
- DiscardOldestPolicy:抛弃队列头部(最旧)的一个任务,并执行当前任务。
- DiscardPolicy:忽略并抛弃当前任务。
/**
* @Author Tim
* @Date 2022/6/15 16:03
*/
@Service
public class MultiThreadServiceImpl {
@Autowired
private UserInfoMapper userInfoMapper; /**
* 1.处理速度一般,并且是从回收的线程池中拿出原来的线程复用的.
* 如果执行的job很慢,就尽量不要使用这种线程池。相反的,如果job处理很快,则可以使用。
*/
private static final ExecutorService executorService = Executors.newCachedThreadPool(new BasicThreadFactory.Builder()
.namingPattern("create-card-thread-%d").build()); /**
* 2.处理速度较快,创建一个具有并行级别的work-stealing线程池。 parallelism: 并发级别,适合使用在很耗时的任务中
*/
private static final ExecutorService newWorkStealingPool = Executors.newWorkStealingPool(); /**
* 3.处理速度较快,核心线程数:10, 最大活跃数:50, 最大线程数可以存活的时间:60s, 用来存储线程池等待执行的任务数:100w
* 在不配置RejectedExecutionHandler的情况下,如果实际处理数100w超过了设置队列等待数Queue,会抛异常。
*/
private static final ThreadPoolExecutor threadPoolLocal =
new ThreadPoolExecutor(10, 20, 20, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(1000000)); /**
* 3. 参数不同。
* 配置RejectedExecutionHandler的情况下,不会报错,CallerRunsPolicy:使用当前调用的线程来执行此任务。
*/
private ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 20, TimeUnit.SECONDS,
new ArrayBlockingQueue(20, true), new ThreadPoolExecutor.CallerRunsPolicy()); public void insertUsersByThreads() {
for (int i = 0; i < 1000000; i++) {
//第二种
// CompletableFuture.runAsync(() -> {
// UserInfoPO userInfoPO = new UserInfoPO();
// userInfoPO.setUserEmail("testEmail");
// userInfoPO.setUserName(RandomStringUtils.randomNumeric(4));
// userInfoPO.setUserId(RandomStringUtils.randomNumeric(4));
// userInfoPO.setUserSex("boy");
// System.out.println("userInfoPO....." + userInfoPO.toString());
// userInfoMapper.insert(userInfoPO);
// }, newWorkStealingPool);
//第三种
newWorkStealingPool.execute(() ->{
UserInfoPO userInfoPO = new UserInfoPO();
userInfoPO.setUserEmail("testEmail");
userInfoPO.setUserId(RandomStringUtils.randomNumeric(8));
userInfoPO.setUserName(RandomStringUtils.randomNumeric(8));
userInfoPO.setUserSex("boy");
System.out.println("userInfoPO....." + userInfoPO.toString());
userInfoMapper.insert(userInfoPO);
});
//第一种
// CompletableFuture.runAsync(() -> {
// UserInfoPO userInfoPO = new UserInfoPO();
// userInfoPO.setUserEmail("testEmail");
// userInfoPO.setUserName(RandomStringUtils.randomNumeric(4));
// userInfoPO.setUserId(RandomStringUtils.randomNumeric(4));
// userInfoPO.setUserSex("boy");
// System.out.println("userInfoPO....." + userInfoPO.toString());
// userInfoMapper.insert(userInfoPO);
// }, executorService); }
}
springboot线程池的使用方式1的更多相关文章
- [开源项目]可观测、易使用的SpringBoot线程池
在开发spring boot应用服务的时候,难免会使用到异步任务及线程池.spring boot的线程池是可以自定义的,所以我们经常会在项目里面看到类似于下面这样的代码 @Bean public Ex ...
- SpringBoot线程池和Java线程池的实现原理
使用默认的线程池 方式一:通过@Async注解调用 public class AsyncTest { @Async public void async(String name) throws Inte ...
- springboot 线程池
我们常用ThreadPoolExecutor提供的线程池服务,springboot框架提供了@Async注解,帮助我们更方便的将业务逻辑提交到线程池中异步执行,今天我们就来实战体验这个线程池服务: 本 ...
- springboot线程池的使用和扩展(转)
springboot线程池的使用和扩展 我们常用ThreadPoolExecutor提供的线程池服务,springboot框架提供了@Async注解,帮助我们更方便的将业务逻辑提交到线程池中异步执行, ...
- springboot线程池的使用和扩展
我们常用ThreadPoolExecutor提供的线程池服务,springboot框架提供了@Async注解,帮助我们更方便的将业务逻辑提交到线程池中异步执行,今天我们就来实战体验这个线程池服务: 本 ...
- springboot线程池@Async的使用和扩展
我们常用ThreadPoolExecutor提供的线程池服务,springboot框架提供了@Async注解,帮助我们更方便的将业务逻辑提交到线程池中异步执行,今天我们就来实战体验这个线程池服务: 本 ...
- 【Java分享客栈】SpringBoot线程池参数搜一堆资料还是不会配,我花一天测试换你此生明白。
一.前言 首先说一句,如果比较忙顺路点进来的,可以先收藏,有时间或用到了再看也行: 我相信很多人会有一个困惑,这个困惑和我之前一样,就是线程池这个玩意儿,感觉很高大上,用起来很fashion, ...
- SpringBoot线程池的创建、@Async配置步骤及注意事项
最近在做订单模块,用户购买服务类产品之后,需要进行预约,预约成功之后分别给商家和用户发送提醒短信.考虑发短信耗时的情况所以我想用异步的方法去执行,于是就在网上看见了Spring的@Async了. 但是 ...
- springboot线程池任务调度类 -- ThreadPoolTaskScheduler介绍
springboot中有一个bean,ThreadPoolTaskScheduler,可以很方便的对重复执行的任务进行调度管理:相比于通过java自带的周期性任务线程池ScheduleThreadPo ...
- Springboot 线程池配置
最近的项目里要手动维护线程池,然后看到一起开发的小伙伴直接用Java了,我坚信Springboot不可能没这功能,于是查了些资料,果然有,这里给一下. 首先我们都知道@Async标签能让方法异步执行, ...
随机推荐
- 【WCH以太网接口系列芯片】基于CH395的组播应用
---------------------------------------------------------------------------------------------------- ...
- 一篇文章带你掌握性能测试工具——Jmeter
一篇文章带你掌握性能测试工具--Jmeter 在目前的中大型企业中,仅仅进行功能测试已经不足以满足企业的需求,在重大客户基数下性能测试将会直接影响到用户体验 所以在这篇文章中我们将会学习性能测试的相关 ...
- [CF1854E] Game Bundles
题目描述 Rishi is developing games in the 2D metaverse and wants to offer game bundles to his customers. ...
- [USACO2022OPEN S] COW Operations S
题目描述 Bessie 找到了一个长度不超过 \(2 \cdot 10^5\) 且仅包含字符 'C','O' 和 'W' 的字符串 \(s\).她想知道是否可以使用以下操作将该字符串变为单个字母 'C ...
- 云端开炉,线上训练,Bert-vits2-v2.2云端线上训练和推理实践(基于GoogleColab)
假如我们一定要说深度学习入门会有一定的门槛,那么设备成本是一个无法避开的话题.深度学习模型通常需要大量的计算资源来进行训练和推理.较大规模的深度学习模型和复杂的数据集需要更高的计算能力才能进行有效的训 ...
- ElasticSearch之线程的数量
ElasticSearch在运行过程中,涉及多种线程池.线程的使用,因此而需要给予足够的线程资源,保证ElasticSearch在需要时可以正常创建出线程. 查看Linux系统当前用户允许创建的线程的 ...
- [VMware]ESXI下硬盘的两种直通方式
文章来自:https://rmbz.net/archives/vmware-esxi-passthrough 最近再搞ESXI,把原来的"黑群晖"改成ESXI:因为群晖里有数据,为 ...
- ClickHouse的JOIN算法选择逻辑以及auto选项
ClickHouse的JOIN算法选择逻辑以及auto选项 ClickHouse中的JOIN的算法有6种: Direct; Partial merge; Hash; Grace hash; Full ...
- 扩展中国剩余定理(Excrt)笔记
扩展中国剩余定理(excrt) 本来应该先学中国剩余定理的.但是有了扩展中国剩余定理,朴素的 CRT 就没用了. 扩展中国剩余定理用来求解如下形式的同余方程组: \[\begin{cases} x \ ...
- 如何在IIS上部署docsify以及404问题
操作步骤 创建一个文件夹,在文件夹中新建2个文件 index.html:入口文件,整个网站只需要这个html文件,其他文件都是md文件 README.md:主页内容,如果没有这个文件,访问时提示404 ...