【笔记】ThreadFactory自定义线程名前缀
前言
在上一篇文章中,我们简单介绍了一下《ThreadPoolExecutor构造方法参数含义》。
在实际开发场景中,我们推荐为每一个自定义的线程池都设置不同的线程名前缀,方便后续问题的处理。
整体的思路也比较简单:
1.创建一个ThreadFactory实现类,NamedThreadFactory;
2.创建NamedThreadFactory对象的时候,设置好线程名前缀;
3.执行newThread方法时,拼接线程名前缀;
代码示例
自定义线程工厂 - NamedThreadFactory
package cn.mrxionge.idemo;import org.jetbrains.annotations.NotNull;import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;/*** 带有前缀名称的线程工厂*/
public class NamedThreadFactory implements ThreadFactory {/*** 线程名前缀*/private final String prefix;/*** 线程编号*/private final AtomicInteger threadNumber = new AtomicInteger(1);/*** 创建线程工厂** @param prefix 线程名前缀*/public NamedThreadFactory(String prefix) {this.prefix = prefix;}@Overridepublic Thread newThread(@NotNull Runnable r) {return new Thread(null, r, prefix + threadNumber.getAndIncrement());}
}
测试方法(伪代码)
ThreadPoolExecutor executor = new ThreadPoolExecutor(50, 100, 5L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(100), new NamedThreadFactory("async-task-pool-"), new ThreadPoolExecutor.AbortPolicy());
for (int i = 0; i < 100; i++) {executor.execute(() -> log.debug("执行中 >>>"));
}
执行结果
2022-06-09 18:24:17.531 [async-task-pool-1] DEBUG c.m.idemo.ThreadPoolTest - 执行中 >>>
2022-06-09 18:24:17.531 [async-task-pool-2] DEBUG c.m.idemo.ThreadPoolTest - 执行中 >>>
2022-06-09 18:24:17.531 [async-task-pool-3] DEBUG c.m.idemo.ThreadPoolTest - 执行中 >>>
2022-06-09 18:24:17.531 [async-task-pool-4] DEBUG c.m.idemo.ThreadPoolTest - 执行中 >>>
...
...
【笔记】ThreadFactory自定义线程名前缀相关推荐
- @Async 异步任务自定义线程池的配置方法和 @Scheduled 定时任务自定义线程池的配置方式
文章目录 一.定时和异步业务场景描述 二.定时调度任务的实现方式 三.定时调度任务的问题描述 四.定时调度多线程解决方案(方案一) 五.异步多线程程序实现方式 六.定时调度多线程解决方案(方案二) 一 ...
- 13、Excutors 结合 ThreadFactory 自动给线程加上线程名
2019独角兽企业重金招聘Python工程师标准>>> 1.需求场景 很多时候我们都会使用线程池,而且是使用多个线程池,比如在:生产者和消费者模型中,生产者线程放到一个线程池里面,而 ...
- Spring Boot使用@Async实现异步调用:自定义线程池
在之前的Spring Boot基础教程系列中,已经通过<Spring Boot中使用@Async实现异步调用>一文介绍过如何使用 @Async注解来实现异步调用了.但是,对于这些异步执行的 ...
- SpringBoot 自定义线程池
文章目录 一.自定义线程池 1. yml配置 2. 线程池配置属性类 3. 开启异步线程支持 4. 创建自定义线程池配置类 5. service逻辑层 6. controller控制层 7. 效果图 ...
- android开发笔记之自定义开关按钮
今天来讲讲自定义单个控件,就拿开关按钮来讲讲,相信大家见了非常多这样的了,先看看效果: 我们可以看到一个很常见的开关按钮,那就来分析分析. 首先: 这是由两张图片构成: ①一张为有开和关的背景图片 ② ...
- 一文搞懂Java自定义线程池参数
背景: 线程是一个开发经常使用的东西,但是实际工作中很少有新建一个线程去执行任务,线程的创建和销毁都会耗费资源,我们一般都会用线程池来完成线程的创建和销毁. 多说一句 JDK自带的线程池不建议大家去使 ...
- android自定义线程池工具类,妈妈再也不用担心你不会使用线程池了(ThreadUtils)...
为什么要用线程池 使用线程池管理线程有如下优点:降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行. 提高线程的可 ...
- Java 自定义线程池
Java 自定义线程池 https://www.cnblogs.com/yaoxiaowen/p/6576898.html public ThreadPoolExecutor(int corePool ...
- 【Java 并发编程】线程池机制 ( 线程池阻塞队列 | 线程池拒绝策略 | 使用 ThreadPoolExecutor 自定义线程池参数 )
文章目录 一.线程池阻塞队列 二.拒绝策略 三.使用 ThreadPoolExecutor 自定义线程池参数 一.线程池阻塞队列 线程池阻塞队列是线程池创建的第 555 个参数 : BlockingQ ...
- 【Android 异步操作】线程池 ( 线程池使用示例 | 自定义线程池使用流程 | 自定义任务拒绝处理策略 | 完整代码示例 )
文章目录 一.自定义线程池使用流程 二.自定义任务拒绝处理策略 三.完整代码示例 在博客 [Android 异步操作]线程池 ( 线程池简介 | 线程池初始化方法 | 线程池种类 | AsyncTas ...
最新文章
- 孙立岩 python-basic: 用于学习python基础的课件(五六七八九十)
- 淘宝特价版给拼多多送芒果,网友:这是什么操作?
- 用AjaxPro实现无刷新翻页效果及数据库分页技术介绍
- 由数字、26个英文字母、下划线或汉字的正则表达式
- vue 将字符串最后一个字符给替换_一步一步的实现Vue(一)
- 7-28晚复习 虚继承与地址分配
- 音视频之使用sonic.cpp实现音频倍速播放功能
- 设置maven 参数调休_IDEA 使用 Maven构建Spark项目
- cpprestsdk编译安装linux,使用C++ REST SDK开发简单的Web(HTTP)服务
- 【CV竞赛】百度车道线检测,正在报名中,8.9万元奖金
- 苹果任命软件主管凯文•林奇为“苹果汽车”项目负责人
- 终于知道为什么NVIDIA的linux驱动这么烂了,一波官方文档告诉你:Linux GPU Driver Developer’s Guide
- jquery noConflict() 兼容其他框架同时用$
- SaaS服务应用集成和生态该何去何从
- 手机上日程应该怎么设置提醒
- Cython优化简介
- 【agora】 Agora Media SDK : aut transport
- 高德地图:创建多个覆盖区域
- 我的2011--虚荣、挣扎、总结和转变的一年
- 微信图片过期怎么办?如何查看微信过期图片?3步即可