自定义线程工厂规范【开发手册】

news2024/11/18 18:34:53

一、介绍

最近在看一些编码以及设计的规范,觉得有些还是很有用的,在这分享给大家。主要学习阿里的Java开发规范(黄山版),这篇主要是对日常大家使用线程池或者线程时,为何应该制定有意义的线程名称等。

二、分析

在创建线程或线程池时,为线程指定一个有意义的名称是一个很好的实践,主要有以下几个原因:

  1. 调试和日志记录:当线程出现问题时,一个明确的线程名称可以帮助你更快地定位问题。通过查看线程名称,你可以更容易地跟踪线程的执行路径,这在多线程应用中尤为重要。
  2. 错误回溯:在复杂的系统中,当错误发生时,一个有意义的线程名称可以提供关于哪个线程导致问题的线索。这使得问题排查和修复变得更为简单。
  3. 资源管理:在大型系统中,有时可能需要暂停或停止特定的线程。明确的线程名称可以帮助你更容易地识别和操作这些线程。
  4. 线程池管理:当使用线程池时,为每个线程指定一个有意义的名称可以让你更容易地了解线程池的状态。例如,哪些线程是活动的,哪些线程是空闲的,以及它们正在执行的任务是什么。
  5. 代码可读性和维护性:即使在单线程应用中,为线程或任务指定一个描述性的名称也可以提高代码的可读性和可维护性。这使得其他开发者更容易理解代码的意图和功能。
  6. 性能监控:在进行性能测试或系统监控时,明确的线程名称可以帮助你更准确地测量和跟踪线程的行为。

三、案例

下图是黄山版里面的内容,说得很详细并且类型为强制的类型:
在这里插入图片描述

然后自己写了一份demo,像平时创建线程执行任务即可拿来直接使用,代码如下所示:

@Slf4j
public class CommonThreadFactory implements ThreadFactory {

    private final String namePrefix;

    //序号id
    private final AtomicInteger nextId = new AtomicInteger(0);

    public CommonThreadFactory(String groupName) {
        this.namePrefix = "FromCommonThreadFactory`s " + groupName + "-Worker-";
    }

    @Override
    public Thread newThread(@NotNull Runnable task) {
        String name = namePrefix + nextId.getAndDecrement();
        Thread thread = new Thread(null, task, name);
        log.info(thread.getName());
        return thread;
    }
}

使用方式也非常简单直接创建一个实例,然后调用newThread方法传入对应的任务,我们就可以在控制台看见日志是哪个线程在执行任务,方便咱盘查问题。
下面简单写了一个测试demo:


    public static void main(String[] args) {
        CommonThreadFactory thread = new CommonThreadFactory("add");
        for (int i = 1; i <= 10; i++) {
            int finalI = i;
            thread.newThread(() -> log.info(String.valueOf(finalI))).start();
        }
    }
   

在这里插入图片描述

四、总结

总的来说,为线程或线程池指定一个有意义的名称是一种良好的编程习惯,它可以帮助你更好地理解和维护代码,提高系统的稳定性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1407055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka-服务端-副本机制

Kafka从0.8版本开始引入副本(Replica)的机制&#xff0c;其目的是为了增加Kafka集群的高可用性。 Kafka实现副本机制之后&#xff0c;每个分区可以有多个副本&#xff0c;并且会从其副本集合(Assigned Replica,AR)中选出一个副本作为Leader副本&#xff0c;所有的读写请求都由…

快速上手的AI工具-文心一言辅助学习

前言 大家好晚上好&#xff0c;现在AI技术的发展&#xff0c;它已经渗透到我们生活的各个层面。对于普通人来说&#xff0c;理解并有效利用AI技术不仅能增强个人竞争力&#xff0c;还能在日常生活中带来便利。无论是提高工作效率&#xff0c;还是优化日常任务&#xff0c;AI工…

数据管理平台Splunk Enterprise本地部署并结合内网穿透实现远程访问

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 本文主要介绍如何简单几步&#xff0c;结合cpolar内网穿透工具实现随时随地在任意浏览器&#xff0c;远程访问在本地…

vue3项目中使用vite-plugin-mock

1、安装插件 npm i mockjs vite-plugin-mock --save-dev 2、修改配置文件 vite.config.js import { viteMockServe } from vite-plugin-mock plugins: [vue(), viteMockServe({ supportTs:false, logger: false, mockPath: "/mock/" // 注…

宝宝洗衣机好吗?高性价比的婴儿洗衣机推荐

随着大家生活水平的提高&#xff0c;越来越多人追求品质化生活。从洗衣服这件基础小事中就能看出&#xff0c;从比较早的解放双手&#xff0c;到追求衣物的洗护&#xff0c;再到近些年来&#xff0c;大人小孩衣服分区洗衣的精致生活理念。如今&#xff0c;洗衣机市场根据消费者…

Windows服务启动类型:自动(延迟启动)、自动、手动、禁用介绍

文章目录 Windows服务启动类型解析一、Windows服务简介1.1 Windows服务的特点无需用户交互启动时间可配置运行账户可配置 二、Windows服务启动类型详解2.1 自动&#xff08;延迟启动&#xff09;2.2 自动2.3 手动2.4 禁用 三、Windows服务启动类型的配置和管理3.1 使用“服务”…

ubuntu1604安装及问题解决

虚拟机安装vmbox7 虚拟机操作&#xff1a; 安装增强功能 sudo mkdir /mnt/share sudo mount -t vboxsf sharefolder /mnt/share第一次使用sudo提示is not in the sudoers file. This incident will be reported 你的root需要设置好密码 sudo passwd root 输入如下指令&#x…

CC工具箱使用指南:【处理面要素空洞】

一、简介 面要素在经过一系列的处理后&#xff0c;可能会存在空洞。 有些小空洞面积过小&#xff0c;人工检查很容易遗漏&#xff0c;于是就做了这个工具。 目的就是获取面要素的空洞&#xff0c;或者去除空洞获取要素的边界。 二、工具参数介绍 右键点击面要素图层&#xf…

c#算法(10)——求点到直线的距离

前言 在上位机软件开发领域,特别是机器视觉领域,经常会遇到尺寸测量的场景,比如让我们求一个点到一条直线的距离,我们已知了直线上的两个点的坐标,然后又已知了直线外的一个点的坐标,那么如何求出该直线外的一点到直线的距离呢?本文就是来讲解如何求点到直线的距离的,…

『论文阅读|2024 WACV 多目标跟踪Deep-EloU|纯中文版』

论文题目&#xff1a; Iterative Scale-Up ExpansionIoU and Deep Features Association for Multi-Object Tracking in Sports 论文特点&#xff1a; 作者提出了一种迭代扩展的 ExpansionIoU 和深度特征关联方法Deep-EIoU&#xff0c;用于体育场景中的多目标跟踪&#xff0c;旨…

【GitHub项目推荐--不错的 Java 开源项目】【转载】

1 基于 Java 的沙盒塔防游戏 Mindustry 是一款用 Java 编写的沙盒塔防游戏。玩家需要建造精密的传送带供应链&#xff0c;提供炮塔弹药&#xff0c;生产建筑材料&#xff0c;保护建筑并抵御敌人。也可以在跨平台多人合作游戏中与朋友一起战斗&#xff0c;或组队进行 PVP 比赛。…

SpringBoot项目整合MybatisPlus并使用SQLite作为数据库

文章目录 SQLite介绍搭建项目创建项目修改pom.xml SQLite查看SQLite是否安装创建数据库创建数据表IDEA连接SQLitenavicat连接SQLite数据库 后端增删改查接口实现MybatisX生成代码不会生成看这个UserUserMapperUserMapper.xml controller创建配置文件application.yaml启动类Incr…

集简云新增邮件发送功能,适用多种创意场景并提升邮件发送效率

在数字营销中&#xff0c;电子邮件依旧是连接企业与客户的重要桥梁。集简云深知这一点&#xff0c;本周推出为企业通讯打造的内置应用——集简云邮件发送&#xff0c;帮助用户创建充满个性化的交易电子邮件&#xff0c;还能通过HTML自定义代码来实现用户的创意场景。可与近千款…

springboot导出数据到excel模板,使用hutool导出数据到指定excel,java写入数据到excel模板

最近遇到一个需求&#xff0c;需要从数据库查询数据&#xff0c;写入到对应的excel导入模板中。再把导出的数据进行修改&#xff0c;上传。 我们项目用的是easyExcel&#xff0c;一顿百度搜索&#xff0c;不得其法。 主要是要把数据填充到指定单元格中&#xff0c;跟平时用到的…

【操作工具】IDEA的properties文件变为灰色的解决办法

背景 赋值了一份properties文件放到项目下面&#xff0c;但是里面的key都是灰色的 解决方案 去掉下面3后面对应的勾 去掉之后

《Linux C编程实战》笔记:信号的发送

信号的发送主要由函数kill、raise、sigqueue、alarm、setitimer以及abort来完成 kill函数 kill函数用来发送信号给指定的进程。 #include<sys/types.h> #include<signal.h> int kill(pid_t pid,int sig); 该函数的行为与第一个参数pid有关&#xff0c;第二个参…

幻兽帕鲁安装和开服教学

《幻兽帕鲁》游戏热度异常火爆&#xff0c;很多玩家想下载《幻兽帕鲁》和朋友玩&#xff0c;但不知道在哪里能够下载到&#xff0c;下面请看《幻兽帕鲁》下载安装教学&#xff0c;希望能够帮助大家。 幻兽帕鲁》目前仅在PC上的Steam平台发售&#xff0c;可以登录Steam搜索“幻…

Unity 解决异步分发方案

很多程序&#xff0c;包括游戏、小程序、一些AR、VR的程序&#xff0c;因为客户端体量太大&#xff0c;更新频繁都涉及到远程热更新的问题&#xff0c;解决这类问题的思路基本上是客户端解决主要功能&#xff0c;资源类放置在服务器。 下面记录下&#xff1a; 1.CDN或者云轻量…

AI嵌入式K210项目(18)-卷积人工神经网络硬件加速器 KPU

文章目录 前言一、K210的KPU二、实验过程总结 前言 K210内置了丰富的加速器&#xff0c;包括神经网络处理器 (KPU)&#xff0c;AES(高级加密加速器)&#xff0c;APU 麦克风阵列语音数据加速计算处理器&#xff0c;现场可编程 IO 阵列 (FPIOA)&#xff0c;数字摄像头接口 (DVP)…

源码篇--Redis 五种数据类型

文章目录 前言一、 字符串类型&#xff1a;1.1 字符串的编码格式&#xff1a;1.1.1 raw 编码格式:1.1.2 empstr编码格式:1.1.3 int 编码格式:1.1.4 字符串存储结构展示: 二、 list类型&#xff1a;2.1 List 底层数据支持&#xff1a;2.2 List 源码实现&#xff1a;2.3 List 结构…