首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入理解ThreadPoolExecutor源码

1.ThreadPoolExeCutor是什么? 线程池的作用是为了解决频繁创建和销毁线程的性能问题,类似的有MySQL连接池。...2.基础介绍 ThreadPoolExecutor得7个参数 ThreadPoolExecutor最常用的构造方法有7个参数如下: 1.corePoolSize(核心线程数),核心线程数可以理解为公司的人员...2.maximumPoolSize(最大线程数),最大线程数可以理解为公司最多的员工能达到多少,包括了外包人员。...3.keepAliveTime(非核心线程存活时间),非核心线程可以理解为公司的外包人员,存活时间就是指外包在公司最多只能待多久时间,超过这个时间就要离开。...4.unit(非核心线程存活时间单位) 5.workQueue(任务队列),任务队列是指线程提交的任务存放的地方,可以理解为公司的需求量太大,此时本部人员忙不过来了。

35440

使用 Executors,ThreadPoolExecutor,创建线程池,源码分析理解

当然 Executors 也是用不同的参数去 new ThreadPoolExecutor 实现的,本文先分析前四种线程创建方式,后在分析 new ThreadPoolExecutor 创建方式 使用...源码分析 public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(...创建线程池 源码分析 ,ThreadPoolExecutor 的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize...四个拒绝策略 ThreadPoolExecutor默认有四个拒绝策略: 1、ThreadPoolExecutor.AbortPolicy() 直接抛出异常RejectedExecutionException...2、ThreadPoolExecutor.CallerRunsPolicy() 直接调用run方法并且阻塞执行 3、ThreadPoolExecutor.DiscardPolicy() 直接丢弃后来的任务

597100
您找到你想要的搜索结果了吗?
是的
没有找到

ThreadPoolExecutor系列一——ThreadPoolExecutor 机制

ThreadPoolExecutor 机制 本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further...1、 处理大量异步任务时能减少每个任务的资源开销; 2、 线程通过线程池管理,减少线程的资源开销; 3、 统计当前任务完成数量以及活跃线程数; 个人认为关键是线程池与任务队列如何完美协作 通过下图说明ThreadPoolExecutor...如果新提交一个任务(new task submitted),线程池还是会创建一个新的线程,只不过new task 被拒绝(rejected); new task 被拒绝(rejected)处理策略: a> ThreadPoolExecutor.AbortPolicy...: 运行时抛出异常(RejectedExecutionException) b> ThreadPoolExecutor.CallerRunsPolicy: 该线程通过简单的反馈控制机制来重新处理该任务的请求...c> ThreadPoolExecutor.DiscardPolicy: 直接扔掉任务 d> ThreadPoolExecutor.DiscardOldestPolicy: 按照进入顺序扔掉队列另一端最先进入的任务

49620

ThreadPoolExecutor详解

ThreadPoolExecutor详解 一. 概述 ThreadPoolExecutor是JDK提供的线程池的基类,其中定义了线程池的核心框架,并且允许客户端通过继承的方式实现自定义的线程池。...JDK提供默认的几种线程池都继承了ThreadPoolExecutor类,因此有必要对ThreadPoolExecutor进行详细的分析。 二....核心参数 ThreadPoolExecutor主要有以下几个参数: corePoolSize:核心线程数。线程池初始化时,内部默认是没有可用线程的。...源码分析 ThreadPoolExecutor有一个内部类Worker,它是对Runnable进行了封装,主要功能是对待执行的任务进行中断处理和状态监控。...可以将Worker简单理解为可中断的、可进行锁处理的Runnable,源码如下: private final class Worker extends AbstractQueuedSynchronizer

57710

ThreadPoolExecutor源码分析

前言 这篇主要讲述ThreadPoolExecutor的源码分析,贯穿类的创建、任务的添加到线程池的关闭整个流程,让你知其然所以然。...希望你可以通过本篇博文知道ThreadPoolExecutor是怎么添加任务、执行任务的,以及延伸的知识点。那么先来看看ThreadPoolExecutor的继承关系吧。 继承关系 ?...ThreadPoolExecutor 先介绍下ThreadPoolExecutor线程池的状态吧 线程池状态 int 是4个字节,也就是32位(注:一个字节等于8位) //记录线程池状态和线程数量(总共...} 其实从上面代码注释中可以看出就三个判断, 核心线程数是否已满 队列是否已满 线程池是否已满 然后根据这三个条件进行不同的操作,下图是Java并发编程的艺术书中的线程池的主要处理流程,或许会比较容易理解些...本文GitHub地址:点这里点这里 参考资料 并发编程网-Java中线程池ThreadPoolExecutor原理探究 Java并发编程的艺术

36610

ThreadPoolExecutor源码学习

那么ThreadPoolExecutor就是用维护多线程的。作为工具类,ThreadPoolExecutor应该提供了很多操作线程的方法,按理说也是逐个去调用目标线程的方法。...那么我们就详细了解一下ThreadPoolExecutor的实现过程吧。我们发现ThreadPoolExecutor类继承了AbstractExecutorService。...作为线程管理的工具,那么ThreadPoolExecutor就是专门维护线程运行的,那么线程的容器也必然在这个类中,也就是我们新建的线程会提交到这个类中,然后通过这个类会将提交的Runnable任务按照他的安排进行执行...我们看到在ThreadPoolExecutor中有一个 private final HashSet workers = new HashSet();其中的Worker...当然通过分析我们发现ThreadPoolExecutor并没有在初始化的时候就创建核心线程,而是在逐步添加任务的时候创建的。根据我的分析和理解,我可能会尽可能少的设置核心线程。

34820

ThreadPoolExecutor的使用

ThreadPoolExecutor也就是线程池。它就是Java为我们开发多线程程序时提供的一个开发框架。...线程池的创建:在创建ThreadPoolExecutor时,会需要传递几个必要的参数,下面我们详细看一下它们每个参数所代表的含义。...corePoolSize(初始化的空闲线程):当我们创建ThreadPoolExecutor对象时,可以用corePoolSize参数设置线程池的初始化线程数,也就是空闲线程,当线程池中的线程数量小于corePoolSize...下面我们用具体的代码来详细说明一下ThreadPoolExecutor的使用。 ? ?...按照上面的分析,因为我们创建ThreadPoolExecutor对象时初始化的空闲线程是2个,并且我们添加到线程池中的数量也是2个,所以当前任务是由核心线程池执行的任务并不会将任务添加到对列中。

2.1K20
领券