死磕java线程系列之线程池深入解析——体系结构

  

死磕java线程系列之线程池深入解析——体系结构

  

(手机横屏看源码更方便)

  <人力资源/>   

注:java源码分析部分如无特殊说明均基于java8版本。

  

简介

  

Java的线程池是块硬骨头,对线程池的源码做深入研究不仅能提高对Java整个并发编程的理解,也能提高自己在面试中的表现,增加被录取的可能性。

  

本系列将分成很多个章节,本章作为线程池的第一章将对整个线程池体系做一个总览。

  

体系结构

  

死磕java线程系列之线程池深入解析——体系结构

  

上图列举了线程池中非常重要的接口和类:

  

(1)遗嘱执行人,线程池顶级接口;

  

(2) ExecutorService,线程池次级接口,对执行器做了一些扩展,增加一些功能,

  

(3) ScheduledExecutorService,对ExecutorService做了一些扩展,增加一些定时任务相关的功能,

  

(4) AbstractExecutorService,抽象类,运用模板方法设计模式实现了一部分方法;

  

(5) ThreadPoolExecutor,普通线程池类,这也是我们通常所说的线程池,包含最基本的一些线程池操作相关的方法实现;

  

(6) ScheduledThreadPoolExecutor,定时任务线程池类,用于实现定时任务相关功能,

  

(7) ForkJoinPool,新型线程池类,java7中新增的线程池类,基于工作窃取理论实现,运用于大任务拆小任务,任务无限多的场景;

  

(8)执行人,线程池工具类,定义了一些快速实现线程池的方法(谨慎使用),

  

执行人

  

线程池顶级接口,只定义了一个执行无返回值任务的方法。

  
 <代码类="语言java ">公共接口执行人{//执行无返回值任务,本文由公从号“彤哥读源码”原创
  无效执行(可运行命令);
  } 
  

ExecutorService

  

线程池次级接口,对执行器做了一些扩展,主要增加了关闭线程池,执行有返回值任务,批量执行任务的方法。

  
 <代码类="语言java ">公共接口ExecutorService延伸执行人{//关闭线程池,不再接受新任务,但已经提交的任务会执行完成
  空间关闭();//立即关闭线程池,尝试停止正在运行的任务,未执行的任务将不再执行//被迫停止及未执行的任务将以列表的形式返回
  ListshutdownNow ();//检查线程池是否已关闭
  布尔isShutdown ();//检查线程池是否已终止,只有在关闭()或shutdownNow()之后调用才有可能为真实的
  布尔isTerminated ();//在指定时间内线程池达到终止状态了才会返回现实
  布尔awaitTermination(长超时,TimeUnit unit)
  抛出InterruptedException;//执行有返回值的任务,任务的返回值为task.call()的结果
  & lt; T>Future提交(Callable任务);//执行有返回值的任务,任务的返回值为这里传入的结果//当然只有当任务执行完成了调用得到()时才会返回
  & lt; T>Future提交(T可运行的任务,结果);//执行有返回值的任务,任务的返回值为null//当然只有当任务执行完成了调用得到()时才会返回
  Future<?比;提交(Runnable任务);//批量执行任务,只有当这些任务都完成了这个方法才会返回
  & lt; T>List比;invokeAll (Collection<?扩展CallableList比;invokeAll (Collection<?扩展CallableT invokeAny (Collection<?扩展CallableT invokeAny (Collection<?扩展Callable 
  

ScheduledExecutorService

  

对ExecutorService做了一些扩展,增加一些定时任务相关的功能,主要包含两大类:执行一次,重复多次执行。

  
 <代码类="语言java ">公共接口ScheduledExecutorService延伸ExecutorService {//在指定延时后执行一次
  公共ScheduledFuture<?比;计划(可运行的命令,
  长时间的推迟,TimeUnit unit);//在指定延时后执行一次
  公共& lt; V>ScheduledFuture

死磕java线程系列之线程池深入解析——体系结构