问题
我们在排查和定位现场问题时,通常希望明确这个线程池里面的线程到底是完成什么的什么任务,所以需要指定对应线程的线程名称。
解决方式
在创建线程池的时候,我们可以使用自定义的线程工厂,该线程工厂中可以指明线程名称,这样我们在排查问题时就可以知道,此处的多线程具体完成的任务名称是什么,方便进行后续的问题定位与排查。
public class CustomThreadFactory implements ThreadFactory { /** * 线程号 */ private final AtomicInteger threadNum = new AtomicInteger(1); /** * 线程名称 */ private String threadName; public DetectorThreadFactory(String threadName) { this.threadName = threadName + "-"; } @Override public Thread newThread(Runnable r) { Thread thread = new Thread(r); thread.setName(threadName + threadNum.getAndIncrement()); return thread; } }