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

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进行了封装,主要功能是对待执行的任务进行中断处理和状态监控。...由于使用了一个整形(32字节)来表示两个状态,因此JDK进行了特殊的处理,只使用30个字节来表示线程数量,剩余2个字节表示状态,这就表示ThreadPoolExecutor最多可以创建(2^29)-1个线程

57710

ThreadPoolExecutor源码分析

前言 这篇主要讲述ThreadPoolExecutor的源码分析,贯穿类的创建、任务的添加到线程池的关闭整个流程,让你知其然所以然。...希望你可以通过本篇博文知道ThreadPoolExecutor是怎么添加任务、执行任务的,以及延伸的知识点。那么先来看看ThreadPoolExecutor的继承关系吧。 继承关系 ?...ThreadPoolExecutor 先介绍下ThreadPoolExecutor线程池的状态吧 线程池状态 int 是4个字节,也就是32位(注:一个字节等于8位) //记录线程池状态和线程数量(总共...第一部分主要是两个循环,外层循环主要是判断线程池状态,下面描述来自Java中线程池ThreadPoolExecutor原理探究 rs >= SHUTDOWN && !...本文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
领券