写在前面
在Java应用开发中经常会用到连接池、线程池等池化技术。池化(pool)技术的本质是通过复用对象、连接等资源,减少创建对象/连接,降低垃圾回收(GC)的开销,适当使用池化相关技术能够显著提高系统效率,优化性能。
线程池
- Java ThreadPoolExecutor
线程池通过减少频繁创建和销毁线程来降低系统性能损耗。每一个线程会对应一个线程栈(Thread Stack),用于存储局部变量与操作信息,可通过JVM参数中 -Xss 来调整线程栈大小,同时通过线程池来控制可创建线程的数量。线程池一般和队列(work queue)配合工作,通过线程池限制处理并发任务的数量;然后使用队列做为缓冲,通过设置队列的深度,当任务数量超过队列深度时,采用相应的拒绝策略处理,保证系统的可用性。
ThreadPoolExecutor构造方法
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
RejectedExecutionHandler handler) {
this(core