幸福一箩筐|Java并发编程 | Executor线程池框架

一、Executor框架简介1、基础简介Executor系统中 , 将线程任务提交和任务执行进行了解耦的设计 , Executor有各种功能强大的实现类 , 提供便捷方式来提交任务并且获取任务执行结果 , 封装了任务执行的过程 , 不再需要Thread().start()方式 , 显式创建线程并关联执行任务 。
2、调度模型线程被一对一映射为服务所在操作系统线程 , 启动时会创建一个操作系统线程;当该线程终止时 , 这个操作系统线程也会被回收 。
幸福一箩筐|Java并发编程 | Executor线程池框架3、核心API结构Executor框架包含的核心接口和主要的实现类如下图所示:
幸福一箩筐|Java并发编程 | Executor线程池框架线程池任务:核心接口:Runnable、Callable接口和接口实现类;
任务的结果:接口Future和实现类FutureTask;
任务的执行:核心接口Executor和ExecutorService接口 。 在Executor框架中有两个核心类实现了ExecutorService接口 , ThreadPoolExecutor和ScheduledThreadPoolExecutor 。
二、用法案例1、API基础ThreadPoolExecutor基础构造
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) {}
幸福一箩筐|Java并发编程 | Executor线程池框架2、初始化方法ExecutorService :Executors.newFixedThreadPool();ExecutorService :Executors.newSingleThreadExecutor();ExecutorService :Executors.newCachedThreadPool();ThreadPoolExecutor :new ThreadPoolExecutor() ;通常情况下 , 线程池不允许使用Executors去创建 , 而是通过ThreadPoolExecutor的方式 , 这样的处理方式更加明确线程池的运行规则 , 规避资源耗尽的风险 。
3、基础案例package com.multy.thread.block08executor;import java.util.concurrent.*;public class Executor01 {// 定义线程池private static ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(3,10,5000,TimeUnit.SECONDS,new SynchronousQueue<>(),Executors.defaultThreadFactory(),new ExeHandler());public static void main(String[] args) {for (int i = 0 ; i < 100 ; i++){poolExecutor.execute(new PoolTask(i));//带返回值:poolExecutor.submit(new PoolTask(i));}}}// 定义线程池任务class PoolTask implements Runnable {private int numParam;public PoolTask (int numParam) {this.numParam = numParam;}@Overridepublic void run() {try {System.out.println("PoolTask "+ numParam+" begin...");Thread.sleep(5000);} catch (Exception e) {e.printStackTrace();}}public int getNumParam() {return numParam;}public void setNumParam(int numParam) {this.numParam = numParam;}}// 定义异常处理class ExeHandler implements RejectedExecutionHandler {@Overridepublic void rejectedExecution(Runnable runnable, ThreadPoolExecutor executor) {System.out.println("ExeHandler "+executor.getCorePoolSize());executor.shutdown();}}流程分析