zoukankan      html  css  js  c++  java
  • java自定义线程名称

    问题:我们看线上业务日志 和 查看jstack文件时 线程的名字经常的序号导致很难区分是哪一个线程,这个线程都在干什么

    比如举例1: 下面这个业务log日志,根据线程名字不知道这是哪个线程类

    如果是线程池的话,看到所有的线程都是以 pool- 开头的,那是因为人家就是写死的。如果要修改线程名字,那么我们自定义线程工厂

    public static ThreadPoolExecutor executPool = new ThreadPoolExecutor(50, 200, 60, TimeUnit.SECONDS, 
                new ArrayBlockingQueue<Runnable>(5000),
                new ThreadFactory(){ public Thread newThread(Runnable r) {
                    return new Thread(r, "t_pl_pool_" + r.hashCode());
                }},
                new ThreadPoolExecutor.DiscardOldestPolicy());
    }

    对于非线程池 ,自定义线程 还有一种方法,就是线程在start后才会执行run方法,run方法的执行表示这个task真正被线程运行了,这时线程的名称也就确定了。所以可以在run的第一句加上 Thread.currentThread().setName("xxxxxx"); 代码如下:

    public class UpdateVertionCheckThread implements extends Thread{
    ...
        @Override
        public void run() throws Exception {
            Thread.currentThread().setName("UpdateVertionCheckThread");
            logger.info("VertionScheduler update start");
         ...
       );
    }

    下面我们看下自定义线程  改造后的 日志信息情况

    同样对于jstack文件也是,里面的打印全部 运行栈的信息,相应线程也是自定义后的名称,很方便知道每一个线程是哪一个线程,在干什么。

  • 相关阅读:
    (转)卡特兰数
    fatal error LNK1123: 转换到 COFF 期间失败
    cocos2dx 中文乱码问题
    c++ primer查漏补缺(一)命名空间
    Centos 7 二进制部署高可用Kubernetes v1.17.x
    hostAliases给pod增加域名解析
    常用的清理 Kubernetes 集群资源命令
    Kubernets 污点与容忍
    Docker 常用命令大全
    Kubernets健康检查——配置存活、就绪和启动探测器
  • 原文地址:https://www.cnblogs.com/wanghongsen/p/12332350.html
Copyright © 2011-2022 走看看