概述
ThreadPerTaskExecutor 字面意思是每个线程的任务执行器,是java.util.concurrent包下的Executor的一个实现类,Executor主要用于执行提交的Runnable任务,实现了任务提交和任务执行进行的解耦,所以可以大概猜到ThreadPerTaskExecutor跟线程执行任务有关。
1
2
  | //MultithreadEventExecutorGroup.java
executor = new ThreadPerTaskExecutor(newDefaultThreadFactory());
  | 
 
构建一个线程工厂
1
2
3
  | protected ThreadFactory newDefaultThreadFactory() {
  return new DefaultThreadFactory(getClass());
}
 | 
 
生成一个默认的线程工厂,传入的是当前类的对象,DefaultThreadFactory是ThreadFactory的一个实现。
1
2
3
4
5
6
7
8
  | //DefaultThreadFactory.java
public DefaultThreadFactory(String poolName, boolean daemon, int priority, ThreadGroup threadGroup) {
  ...
  prefix = poolName + '-' + poolId.incrementAndGet() + '-';
  this.daemon = daemon;
  this.priority = priority;
  this.threadGroup = threadGroup;
}
 | 
 
  - 【4】给这个工厂定义一个唯一名字前缀,
eventLoopGroup_ +自增器,在DefaultThreadFactory类中有具体方法来生成这个poolName可以自行查看。 
线程执行器
1
2
3
4
5
6
  | //ThreadPerTaskExecutor.java
private final ThreadFactory threadFactory;
public  ThreadPerTaskExecutor(ThreadFactory threadFactory) {
  ... 
  this.threadFactory = threadFactory;
}
 | 
 
【4】构造方法就干一件事,给成员变量赋值
由于ThreadPerTaskExecutor实现了Executor接口,它实现接口的execute方法
1
2
3
4
5
  | //ThreadPerTaskExecutor.java 
@Override
public void execute(Runnable command) {
  threadFactory.newThread(command).start();
}
 | 
 
  - 【3】使用了代理模式,由这个类里面的成员变量
threadFactory进行线程创建和执行。