幸福一箩筐|Java并发编程 | Executor线程池框架
一、Executor框架简介1、基础简介Executor系统中 , 将线程任务提交和任务执行进行了解耦的设计 , Executor有各种功能强大的实现类 , 提供便捷方式来提交任务并且获取任务执行结果 , 封装了任务执行的过程 , 不再需要Thread().start()方式 , 显式创建线程并关联执行任务 。
2、调度模型线程被一对一映射为服务所在操作系统线程 , 启动时会创建一个操作系统线程;当该线程终止时 , 这个操作系统线程也会被回收 。
3、核心API结构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
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();}}
流程分析
- 线程池中线程数小于corePoolSize时 , 新任务将创建一个新线程执行任务 , 不论此时线程池中存在空闲线程;
- 笙笙千离|惠若琪李宇春同框颁奖,春春身高176还自卑,巨人身高收获幸福
- 资讯早知道|9年后再看《步步惊心》,发现若曦无论跟谁都不会幸福
- 弹钢琴|原创吉娜为1岁宠物兔庆生,郎朗弹钢琴助兴,幸福温馨像一家三口
- 人民日报|岳阳君山区:消费扶贫托起贫困户稳稳的幸福
- “全国人大 ”微信公众号|何健忠:以实施民法典提升人民美好生活的“幸福指数”
- 经济日报-中国经济网|【幸福花开新边疆】219国道旁的“脱贫事”
- 新华网|【幸福花开新边疆】奋发学技能 靠己奔小康
- 小机灵鬼|干货速来!透彻剖析微服务架构设计模式,深入开发Java有奇效
- 【幸福花开新边疆】奋发学技能 靠己奔小康
- 【幸福花开新边疆】219国道旁的“脱贫事”