一、Executor框架
1. 框架结构
框架有三部分构成:任务(Runnable/Callable)、任务的执行(Executor)、异步计算的结果(Future)
- Executor是核心接口类
- ThreadPoolExecutor
/
ScheduledThreadPoolEdecutor`可以去执行 Runnable/Callable接口的实现类 Future
接口以及Future
接口的实现类FutureTask
类都可以代表异步计算的结果,当我们把 Runnable接口 或Callable接口的实现类提交给 ThreadPoolExecutor 或ScheduledThreadPoolExecuto执行。(调用
submit() 方法时会返回一个 FutureTask 对象)
2.框架使用示意图
二、ThreadPoolExecutor类(重点)
ThreadPoolExecutor几个参数:
- **
corePoolSize
😗*核心线程数 maximumPoolSize
: 最大线程数- **
workQueue
😗*当前运行的线程数 keepAliveTime
:当线程数大于核心线程数时,多余的空闲线程存活的最长时间unit
:keepAliveTime
参数的时间单位threadFactory
:Thread线程handler
:饱和策略
1.饱和策略
- ThreadPoolExecutor.AbortPolicy:抛出(拒绝新任务的处理)
- ThreadPoolExecutor.CallerRunsPolicy:直接在调用
execute
方法的线程中运行(run
)被拒绝的任务,如果执行程序已关闭,则会丢弃该任务 ThreadPoolExecutor.DiscardPolicy
: 不处理新任务,直接丢弃掉ThreadPoolExecutor.DiscardOldestPolicy
: 此策略将丢弃最早的未处理的任务请求
2. Runnable+ThreadPoolExecutor
Runable接口的实现类:
import java.util.Date;
/**
* 这是一个简单的Runnable类,需要大约5秒钟来执行其任务。
* @author shuang.kou
*/
public class MyRunnable implements Runnable {
private String command;
public MyRunnable(String s) {
this.command = s;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " Start. Time = " + new Date());
processCommand();
System.out.println(Thread.currentThread().getName() + " End. Time = " + new Date());
}
private void processCommand() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public String toString() {
return this.command;
}
}
ThreadPoolExecutor执行runnable接口的实现类:
import