1

概述

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进行线程创建和执行。