首页 > 其他分享 >【线程池】定义线程池名称

【线程池】定义线程池名称

时间:2023-03-07 20:44:57浏览次数:31  
标签:定义 System 线程 名称 println new public ThreadPoolExecutor

结论

方法有很多,目的都是修改线程工厂类里面的 Name 属性
记录一下可能会到用的方法

1、自定义线程工厂,模仿 NamedThreadFactory 自定义写一个就行
2、Google guava 工具类 提供的 ThreadFactoryBuilder
3、Spring 框架提供的 CustomizableThreadFactory
4、Apache commons-lang3 提供的 BasicThreadFactory

代码

1、自定义线程工厂,模仿 NamedThreadFactory 自定义写一个就行

// 实现 ThreadFactory 接口,实现一个线程工厂类,照抄。不用引入新的包,推荐
public class RenameThreadPool01 {

    @Test
    public void init(){

        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10, 10, TimeUnit.SECONDS, new ArrayBlockingQueue<>(1000),
                new NamedThreadFactory("mythread"));

        threadPoolExecutor.execute(()->{
            System.out.println(33366);
            System.out.println(1/0);
        });

    }

    private class NamedThreadFactory implements ThreadFactory {

        private final ThreadGroup group;
        private final AtomicInteger threadNumber = new AtomicInteger(1);
        private final String namePrefix;

        NamedThreadFactory(String name) {
            SecurityManager s = System.getSecurityManager();
            this.group = s != null ? s.getThreadGroup() : Thread.currentThread().getThreadGroup();
            this.namePrefix = "哦豁-" + name + "-thread-";
        }

        @Override
        public Thread newThread(Runnable r) {
            Thread t = new Thread(this.group, r, this.namePrefix + this.threadNumber.getAndIncrement(), 0L);
            t.setDaemon(true);
            if (t.getPriority() != 5) {
                t.setPriority(5);
            }

            return t;
        }
    }

}

2、Google guava 工具类 提供的 ThreadFactoryBuilder

比较方便,但要引入依赖,看情况使用

import com.google.common.util.concurrent.ThreadFactoryBuilder;

public class RenameThreadPool02 {

    @Test
    public void init(){

        ThreadFactory guavaThreadFactory = new ThreadFactoryBuilder().setNameFormat("xxss-pool-").build();

        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10, 10, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(1000),
                guavaThreadFactory);

        threadPoolExecutor.execute(()->{
            System.out.println(33366);
            System.out.println(1/0);
        });
    }
}

3、Spring 框架提供的 CustomizableThreadFactory

比较方便,但要引入依赖,看情况使用

import org.springframework.scheduling.concurrent.CustomizableThreadFactory;

public class RenameThreadPool03 {

    @Test
    public void init(){

        ThreadFactory springThreadFactory = new CustomizableThreadFactory("aaspringThread-pool-");

        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10, 10, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(1000),
                springThreadFactory);

        threadPoolExecutor.execute(()->{
            System.out.println(33366);
            System.out.println(1/0);
        });
    }
}

4、Apache commons-lang3 提供的 BasicThreadFactory

比较方便,但要引入依赖,看情况使用

import org.apache.commons.lang3.concurrent.BasicThreadFactory;

public class RenameThreadPool04 {

    @Test
    public void init(){

        ThreadFactory basicThreadFactory = new BasicThreadFactory.Builder()
                .namingPattern("basicThreadFactory-").build();

        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10, 10, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(1000),
                basicThreadFactory);

        threadPoolExecutor.execute(()->{
            System.out.println(33366);
            System.out.println(1/0);
        });
    }
}

暂时记录了这么几种,大同小异。按需实现吧。

标签:定义,System,线程,名称,println,new,public,ThreadPoolExecutor
From: https://www.cnblogs.com/aaacarrot/p/17189570.html

相关文章

  • 线程安全的解释
    思路:三个窗口卖票,我们需要设计3条线程表示都实现卖票的操作。并且因为我们的票数是一定的,所以我们需要将票数共享packagecom.cook.test;//实现卖票操作(实现Runnable接......
  • C# Thread开启线程的几种方式
    C#Thread开启线程的几种方式2023-01-2308:20·opendotnet概述无论学习那门编程语言,多线程都是逃不掉的一个坎。为了提升程序整体的运行效率,我们一般都会把比较耗时......
  • 生成你的自定义密码本Python
    python生成一个自定义密码本importitertoolsasitsimportos#定义生成密码本的函数defgenerate_passwords(length,combination):ifcombination=="1":......
  • 形参与实参 和 名称空间
    1.形参与实参的介绍形参:在定义函数阶段定义的参数称之为形式参数(相当于变量名)deffunc(x,y):#x=1y=2print(x,y)实参:在调用函数阶段传入的值,(相当于变量名)func(1,2)形......
  • 多线程设计模式-全面详解(学习总结---从入门到深化)
    目录​​SingleThreadExecution设计模式​​​​机场过安检​​​​ 非线程安全​​​​ 问题分析​​​​首字母相同却未通过检查​​​​为何出现首字母不相同的情况......
  • 直播平台源代码,Android自定义View实现呼吸灯效果
    直播平台源代码,Android自定义View实现呼吸灯效果自定义View自定义BreathView的Kotlin代码如下: importandroid.animation.ValueAnimatorimportandroid.animation.V......
  • 未定义符号的链接问题通用解决方法
    在linux下做c/c++开发时,经常遇到一个问题,就是如果代码引用了大量的第三方库,链接的时候常忘记或者根本就不知道具体要链接哪个库,导致链接的时候报未定义的引用,特别是一些库......
  • C# 多线程(Thread和Task)
    C#多线程(Thread和Task)线程(Thread)是进程中的基本执行单元,是操作系统分配CPU时间的基本单位,一个进程可以包含若干个线程,在进程入口执行的第一个线程被视为这个进......
  • EF7数据库提供者的自定义值生成器
    本文将讲解提供者使用值生成器的原理。因代码太多,本文只摘要重要代码,并且删除了代码中的注释。如果您不了解,如何使用EF的值生成器?见这篇文章:《EF7创建模型值生成篇》?SqlS......
  • HANA-BW-改造自定义数据源
    1HANA-BW-改造自定义数据源22020年5月13日312:534ZMM_TRAN_KONV改为hana触发器增量上载5源代码:6OPENCURSORWITHHOLDS_CURSORFOR7......