netty NioEventLoopGroup 线程名称设置

在初始化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


你可能感兴趣的:(java,Netty)