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标签能让方法异步执行, ...
随机推荐
- 安卓端出现https请求失败的一次问题排查
背景 某天早上,正在一个会议时,突然好几个同事被叫出去了:后面才知道,是有业务同事反馈到领导那里,我们app里面某个功能异常. 具体是这样,我们安卓版本的app是禁止截屏的(应该是app里做了拦截), ...
- New Type Functions/Utilities for Dealing with Ranges in C++20
Generic Types of Ranges 类型萃取从字面意思上来说其实就是帮助我们挑选某个对象的类型,筛选特定的对象来做特定的事.可以先来回顾一下以前的写法. #include <ve ...
- 生成模型的两大代表:VAE和GAN
生成模型 给定数据集,希望生成模型产生与训练集同分布的新样本.对于训练数据服从\(p_{data}(x)\):对于产生样本服从\(p_{model}(x)\).希望学到一个模型\(p_{model}( ...
- vue-test4 -----插槽
<template> <!-- <Main class="cccc"/> <component-a/> --> <slot-d ...
- eclipse的问题
在我使用eclipse的时候出现的一个问题 就是因为汉化之后出现的问题 问题的解决办法 点击帮助 关于 安装细节 选中Babel Language Pack for rt.rap in Chinese ...
- SpringBoot整合Filter过滤器
话不多说,直接上核心代码 1.先创建一个Filter类 package com.qbb.reggie.filter; import com.alibaba.fastjson.JSON; import ...
- 看看 Asp.net core Webapi 项目如何优雅地使用分布式缓存
前言 缓存是提升程序性能必不可少的方法,Asp.net core 支持多级缓存配置,主要有客户端缓存.服务器端缓存,内存缓存和分布式缓存等.其中客户端缓和服务器端缓存在使用上都有比较大的限制,而内存缓 ...
- ImportError: No module named pypinyin
import platform, subprocess, os, zipfile, xml, re, pypinyin ImportError: No module named pypinyin pi ...
- Android联系人增删改查
1:申请权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-p ...
- PBKDF2(Password-Based Key Derivation Function 2)算法
一.引言 在当今数字时代,保护用户数据和隐私的安全变得越来越重要.为实现这一目标,加密和密钥管理技术发挥着关键作用.PBKDF2(Password-Based Key Derivation Funct ...