之前不知道是看了哪篇文章,形成了一个概念,说ThreadPoolExecutor的线程超时回收机制,是采用的DeplyQueue,我觉得非常惊讶,DeplyQueue虽然说是超时的能够取出回收,但是那些没有超时的对象,是怎么也取不出来的啊,带着这个问题,我详细阅读了一下这部分的源代码,发现其实现和DelayQueue一点关系也没有,也算是解决了我的一个疑问。
该线程池的实现,主要有两个容器,一个放任务,一个放线程,然后其他一堆参数,都围绕这2个容器进行设置。
BlockingQueue: 这是一个任务(Runnable)队列。每次提交上来的任务,如果不是能立刻执行的话,都会存到这个队列里面。
HashSet: 这个是一个Thread的容器,容器里面的Thread会一刻不停的从BlockingQueue里面take任务,直到BlockingQueue的所有任务都清掉了,这些Thread还是不停地take,这个时候当然take不到任何东西,从而被阻塞起来。阻塞了一段可配置的时间(keepAliveTime)后,线程就会被清掉。
对于HashSet的容量,可以设置一个正常值(corePoolSize),
当HashSet里面的Thread数量小于这个值的时候,新进来的任务就不进入到BlockingQueue队列了,立刻被新创建的线程执行,同时这个新的线程加入到了HashSet里面。
当HashSet里面的数量大于这个正常值的时候,新任务就加到队列里面,等待被take出去然后执行。
HashSet的容量可以设置一个最大值(maxPoolSize),当队列满了的时候,仍然有很多任务进来,这时如果HashSet还没有达到最大值,就又能创建新的Thread来处理这些任务,处理完后线程被加入到HashSet中,继续开始take队列里面的任务。
分享到:
相关推荐
死磕ThreadPoolExecutor线程池.pdf!!死磕ThreadPoolExecutor线程池.pdf死磕ThreadPoolExecutor线程池.pdf死磕ThreadPoolExecutor线程池.pdf
ThreadPoolExecutor线程池
主要为大家详细介绍了ThreadPoolExecutor线程池的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要介绍了解决python ThreadPoolExecutor 线程池中的异常捕获问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
提供工厂方法来创建不同类型的线程池,这篇文章主要介绍了Java ThreadPoolExecutor 线程池的使用介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来...
下面小编就为大家带来一篇简单谈谈ThreadPoolExecutor线程池之submit方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇ThreadPoolExecutor线程池原理及其execute方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
线程池ThreadPoolExecutor实战及其原理分析(下)线程池ThreadPoolExecutor实战及其原理分析(下)线程池ThreadPoolExecutor实战及其原理分析(下)线程池ThreadPoolExecutor实战及其原理分析(下)线程池ThreadPoolExecutor...
在《阿里巴巴java开发手册》中...另外由于前面几种方法内部也是通过ThreadPoolExecutor方式实现,使用ThreadPoolExecutor有助于大家明确线程池的运行规则,创建符合自己的业务场景需要的线程池,避免资源耗尽的风险。
java代码 ThreadPoolExecutor线程池并发测试例子如有误欢迎指正
线程池的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,那么超出数量的线程排队等候,等其他线程执行完毕再从队列中取出任务来执行。...
ThreadPoolExecutor的使用和Android常见的4种线程池使用介绍
1.资源简介:PyQt5中使用多线程模块QThread解决了PyQt5界面程序执行比较耗时操作时,程序卡顿出现的无响应以及界面输出无法实时显示的问题,采用线程池ThreadPoolExecutor解决了ping多个IP多任务耗时问题。...
线程池是并发应用中,为了减少...在mina中大量的使用这一技术,除了Executors的工厂方法构建线程池之外,它还继承自ThreadPoolExecutor提供自己的线程池的实现OrderedThreadPoolExecutor和UnorderedThreadPoolExecutor
ThreadPoolExecutor线程池源码
从Python3.2开始,标准库为我们提供了 concurrent.futures 模块,它提供了 ThreadPoolExecutor (线程池)和ProcessPoolExecutor (进程池)两个类。 相比 threading 等模块,该模块通过 submit 返回的是一个 future ...
线程池ThreadPoolExecutor底层原理源码分析
一个关于java 线程池的例子,也适合android