其实还有一个是Apache commons-lang3 提供的 BasicThreadFactory工厂类,也可以给线程池命名,咱这里就不贴代码了,原因是他们的本质都是通过Thread 的setName()方法实现的!所以,我们其实自己也可以设计一个工厂类也实现线程池的命名操作! 方法三:自定义工厂类实现线程池命名 先定义一个工厂类,通过实现ThreadFac...
在newThread()方法中,我们创建了一个新的线程,并通过setName()方法为该线程设置了一个命名。 步骤二:创建线程池 接下来,我们需要创建一个线程池,并使用自定义的线程工厂。以下是创建线程池的代码示例: importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassThreadPoolExample{publi...
1. 创建线程池 首先,我们需要创建一个线程池,可以使用ExecutorService接口中的newCachedThreadPool()方法来创建一个缓存线程池。 ExecutorServiceexecutor=Executors.newCachedThreadPool(); 1. 2. 实现线程工厂 接下来,我们需要实现一个线程工厂,用于创建线程。可以新建一个类来实现ThreadFactory接口。 classCustomThreadFacto...
但是在测试过程中,我注意到线程名的命名为默认的pool-1-thread-X,虽然可以分辨出不同的线程在进行作业,但依然很不方便,为什么默认会以这个命名方式进行命名呢? 线程池的命名 点进Executors.newFixedThreadPool,发现在初始化线程池的时候有另一种方法 public static ExecutorService newFixedThreadPool(int nThreads, Th...
□ 给线程命名 classProgram { staticvoidMain(string[] args) { Thread.CurrentThread.Name = "主线程"; Thread t =newThread(Say); t.Name = "其它工作线程"; t.Start(); Say(); } staticvoidSay() { Console.WriteLine("我的名字是:" + Thread.CurrentThread.Name); ...
我们从源码入手,了解一下创建定长线程池命名是在哪一步 publicstaticExecutorServicenewFixedThreadPool(intnThreads){returnnewThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,newLinkedBlockingQueue<Runnable>());}publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,...
线程池线程重命名 使用场景 在工作中使用线程池,万一线程抛出异常了,日志不好记录到底是哪个线程池抛出的异常;所以为了方便排查,给线程池的线程自定义命名,主要方法就是重写生产线程工厂的命名方法。下面代码示范 集成线程工厂重写 publicclassNamedThreadFactoryimplementsThreadFactory{privatestaticfinalAtomicIntegerpoolNumber=...
默认的线程池工厂,namePrefix = "pool-" +poolNumber.getAndIncrement() + "-thread-";,使用一个原子类,命名规则是这样的 代码语言:javascript 复制 /** * The default thread factory */staticclassDefaultThreadFactoryimplementsThreadFactory{privatestaticfinal AtomicInteger poolNumber=newAtomicInteger(1);privatefi...
ThreadFactory threadFactory);其中:ThreadFactory就是说这个池子里的线程是怎么例化,线程的属性值,如:new ThreadFactory() { public Thread newThread(Runnable r) { return new Thread(r, "thread_pool_" + r.hashCode()); }}就是给这个线程池里的所有线程起一个别名。