您的位置:首页 > 运维架构

netty NioEventLoopGroup 线程名称设置

2017-01-11 16:41 2261 查看
在初始化workergroup的时候

如果不指定ThreadFactory,那么将使用netty默认的ThreadFactory DefaultThreadFactory

比如在日志输出的可以看出线程名称是

2017 一月 11 16:34:40.420 [nioEventLoopGroup-3-1] INFO  c.z.e.netty.handler.DownloadHandler - nioEventLoopGroup-3-1

nioEventLoopGroup-3-1

prefix = poolName + '-' + poolId.incrementAndGet() + '-';

Thread t = newThread(new DefaultRunnableDecorator(r), prefix + nextId.incrementAndGet());

由3部分组成

poolname 例如 nioEventLoopGroup

然后-poolid

然后是-线程id

可以自定义自己的ThreadFactory

package com.zheyue.encrypt.concurrency;

import org.apache.commons.lang3.StringUtils;

import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;

/**
* @author FD
* @date 2017/1/11
*/
public class NamedThreadFactory implements ThreadFactory {

private static final AtomicInteger threadNumber = new AtomicInteger(1);

private final AtomicInteger mThreadNum = new AtomicInteger(1);

private final String prefix;

private final boolean daemonThread;

private final ThreadGroup threadGroup;

public NamedThreadFactory() {
this("fileServer-threadPool-" + threadNumber.getAndIncrement(), false);
}

public NamedThreadFactory(String prefix) {
this(prefix, false);
}

public NamedThreadFactory(String prefix, boolean daemon) {
this.prefix = StringUtils.isNotEmpty(prefix) ? prefix + "-thread-" : "";
daemonThread = daemon;
SecurityManager s = System.getSecurityManager();
threadGroup = (s == null) ? Thread.currentThread().getThreadGroup() : s.getThreadGroup();
}

public Thread newThread(Runnable runnable) {
String name = prefix + mThreadNum.getAndIncrement();
//        Thread ret = new Thread(threadGroup, runnable, name, 0);
Thread ret = new Thread(threadGroup, runnable, name);
ret.setDaemon(daemonThread);
return ret;
}

public ThreadGroup getThreadGroup() {
return threadGroup;
}
}

另外java 使用executors.newXXX 方法创建的线程池 也会使用java默认的线程工厂 比如pool-2-thread-1

spring框架也会使用executors.newXXX创建线程池,所以上面是2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: