我们知道,受限于硬件、内存和性能,我们不可能无限制的创建任意数量的线程,因为每一台机器允许的最大线程是一个有界值。也就是说ThreadPoolExecutor管理的线程数量是有界的。线程池就是用这些有限个数的线程,去执行提交的任务。然而对于多用户、高并发的应用来说,提交的任务数量非常巨大,一定会比允许的最大线程数多很多。为了解决这个问题,必须要引入排队机制,或者是在内存中,或者是在硬盘等容量很大的...
分类:
编程语言 时间:
2014-09-13 10:39:45
阅读次数:
240
线程池的使用
1.创建线程池
Java线程池的实现是java.util.concurrentThreadPoolExecutor类。先看该类的构造函数,该类提供了4个构造函数,但最终都调用了参数最多的一个,也就是说如果你选择其他的构造函数,某些值会使用默认值。我们看最负责的一个构造函数:
public ThreadPoolExecutor(int
corePoolSize,...
分类:
编程语言 时间:
2014-09-09 13:28:08
阅读次数:
435
线程工厂
在调用构造函数后再定制ThreadPoolExecutor
扩展ThreadPoolExecutor
递归算法的并行化...
分类:
编程语言 时间:
2014-09-07 22:30:15
阅读次数:
328
设置线程池的大小
配置ThreadPoolExecutor
管理队列任务
饱和策略...
分类:
编程语言 时间:
2014-09-06 22:33:34
阅读次数:
353
线程池负责管理工作线程,包含一个等待执行的任务队列。线程池的任务队列是一个Runnable集合,工作线程负责从任务队列中取出并执行Runnable对象。java.util.concurrent.executors 提供了 java.util.concurrent.executor 接口的一个Java...
分类:
编程语言 时间:
2014-09-04 14:41:29
阅读次数:
243
在配置和调整应用线程池的时候,首先考虑的是线程池的大小。
线程池的合理大小取决于未来提交的任务类型和所部署系统的特征。定制线程池的时候需要避免线程池的长度“过大”或者“过小”这两种极端情况。
线程池过大:那么线程对稀缺的CPU和内存资源的竞争,会导致内存高使用量,还可能耗尽资源。
线程池过小:由于存在很多可用的处理器资源还未工作,会对吞吐量造成损失。
精密的计算出线程池的确切大小是很困难的,一般我们会估算出一个合理的线程池大小。...
分类:
编程语言 时间:
2014-08-31 18:43:41
阅读次数:
312
Reference: 《创建Java线程池》[1],《Java线程:新特征-线程池》[2], 《Java线程池学习》[3],《线程池ThreadPoolExecutor使用简介》[4],《Java5中的线程池实例讲解》[5],《ThreadPoolExecutor使用和思考》[6][1]中博主自己通...
分类:
编程语言 时间:
2014-08-30 02:20:48
阅读次数:
315
使用这么多if-else就是为了性能考虑,减小锁的使用范围,避免execute方法整个执行过程中都持有mainLock锁。可以看到只有调用addIfUnderCorePoolSize、ensureQueuedTaskHandled、addIfUnderMaximumPoolSize这3个方法才需要持有锁。如果新提交的任务,不会进入这3个方法,那么就不需要持有锁。我们来看下,execute方法的设计是否能够有效地减少进入这3个方法的次数,实现快进快出。...
分类:
其他好文 时间:
2014-08-29 00:10:16
阅读次数:
332
ThreadPoolExecutor的完整构造方法的签名是: ThreadPoolExecutor( int corePoolSize, //池中所保存的线程数,包括空闲线程 int maximumPoolSize, //池...
分类:
其他好文 时间:
2014-08-27 01:36:57
阅读次数:
242