Netty解析六:DefaultThreadFactory与FastThreadLocalThread
在构建NioEventLoopGroup需要传入线程池Executor,默认是使用它的父类MultithreadEventLoopGroup.newDefaultThreadFactory()方法返回的DefaultThreadFactory。
所以本篇讲解DefaultThreadFactory与FastThreadLocalThread。
解析
线程工厂类DefaultThreadFactory
在MultithreadEventLoopGroup中封装了一个DefaultThreadFactory的构建。
1 | public final static int MAX_PRIORITY = 10; |
继承关系
DefaultThreadFactory实现了ThreadFactory接口。1
public class DefaultThreadFactory implements ThreadFactory {}
成员变量
1 | // 线程池下一个id |
构造器
1 | public DefaultThreadFactory(Class<?> poolType, int priority) { |
核心构造器
1 | public DefaultThreadFactory(String poolName, boolean daemon, int priority, ThreadGroup threadGroup) { |
newThread方法
Thread newThread(Runnable r) 方法是ThreadFactory接口中定义用于生产线程。
1 |
|
DefaultThreadFactory中返回的是FastThreadLocalThread,FastThreadLocalThread对于ThreadLocal做了优化。
1 | protected Thread newThread(Runnable r, String name) { |
线程类FastThreadLocalThread
FastThreadLocalThread继承了Thread类,是一个特殊的Thread提供了访问更快的FastThreadLocal
FastThreadLocalThread中传入的runnable都会使用FastThreadLocalRunnable.wrap(target)封装成FastThreadLocalRunnable。
成员变量
1 | // 线程执行runnable之后是否需要清理FastThreadLocal |
构造器
FastThreadLocalThread有许多构造器,都依赖父类Thread,简单列举几个。1
2
3
4
5
6
7
8
9
10
11public FastThreadLocalThread() {
cleanupFastThreadLocals = false;
}
public FastThreadLocalThread(Runnable target) {
super(FastThreadLocalRunnable.wrap(target));
cleanupFastThreadLocals = true;
}
public FastThreadLocalThread(Runnable target, String name) {
super(FastThreadLocalRunnable.wrap(target), name);
cleanupFastThreadLocals = true;
}
其他方法
剩下的方法可以理解为两个成员的get和set方法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public final InternalThreadLocalMap threadLocalMap() {
return threadLocalMap;
}
public final void setThreadLocalMap(InternalThreadLocalMap threadLocalMap) {
this.threadLocalMap = threadLocalMap;
}
public boolean willCleanupFastThreadLocals() {
return cleanupFastThreadLocals;
}
public static boolean willCleanupFastThreadLocals(Thread thread) {
return thread instanceof FastThreadLocalThread &&
((FastThreadLocalThread) thread).willCleanupFastThreadLocals();
}
FastThreadLocalRunnable
FastThreadLocalRunnable实现了Runnable接口,功能是在实际的runnable对象的run()方法执行完成后执行FastThreadLocal.removeAll();
成员变量
1 | private final Runnable runnable; |
构造器
1 | private FastThreadLocalRunnable(Runnable runnable) { |
run()方法
在真正的runnable方法执行完成后执行FastThreadLocal.removeAll()
1 |
|
wrap(Runnable runnable)方法
如果runnable对象不是FastThreadLocalRunnable类,则封装成FastThreadLocalRunnable。
1 | static Runnable wrap(Runnable runnable) { |
`