ThreadPoolExecutor的内部工作原理

一、初始化一个线程池

基于ThreadPoolExecutor类初始化一个指定线程数的线程池线程池

二、提交任务

有两种提交任务的方式:Executor.execute()ExecutorService.submit()

通过Executor.execute()方法提交的任务,必须实现Runnable接口,该方式提交的任务不能获取返回值,因此无法判断任务是否执行成功。
通过ExecutorService.submit()方法提交的任务,可以获取任务执行完的返回值。

三、执行任务

execute实现的执行流程:

先查看当前运行状态,如果不是RUNNING 状态会拒绝执行任务,如果是RUNNING状态,就会查看当前运行的线程数量,如果小于核心线程数,会创建新的线程来执行这个任务,如果不小于核心线程,会将这个任务放到阻塞队列去等代执行,直到上一个任务执行完再来执行这个任务。如果失败会创建一个非核心线程来执行这个任务如果当前线程数大于最大线程数,会直接拒绝该任务.

submit实现的执行流程:

这个方法也是用来向线程池提交任务的,但是它和execute()方法不同,它能够返回任务执行的结果,它实际上还是调用的execute()方法,只不过它利用了Future来获取任务执行结果。


关于ThreadPoolExecutor的文章可以看:
深入分析Java线程池的实现原理
Java线程池执行器ThreadPoolExecutor工作原理
Java并发编程:线程池的使用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 线程池的概念和定义 在服务器端的业务应用开发中,Web服务器(诸如Tomcat、Jetty)需要接受并处理http...
    dtdh阅读 853评论 0 1
  • 文章摘要:在业务系统中,线程池框架技术一直是用来解决多线程并发的一种有效方法。 在JDK中,J.U.C并发包下的T...
    癫狂侠阅读 2,142评论 2 21
  • 秋风清,秋月明。落叶聚还散,寒鸦栖复惊。相思相见知何日?此时此夜难为情。 相思苦,相见难。旅途冷且寂,回忆肆而狂。...
    爱预阅读 250评论 0 1
  • 人的一辈子没法做太多事情,所以每一件都要做得精彩绝伦。你的时间有限,所以不要为别人而活。不要被教条所限,不要活在别...
    JasonCeng阅读 930评论 2 3
  • 概述 前文中讲解了递归的运行机制,并讲解了简单的递归情况。从程序设计的角度来将,递归其实是现代程序设计不可或缺的一...
    CodingTech阅读 2,454评论 2 7