在了解线程池的基本作用后,我们学习一下线程池是如何创建线程的
2 创建线程池
首先从ThreadPoolExecutor构造方法讲起,学习如何自定义ThreadFactory和RejectedExecutionHandler...)
线程池允许创建的最大线程数
若队列满,并且已创建的线程数小于最大线程数,则线程池会再创建新的线程放入works中执行任务,CashedThreadPool的关键,固定线程数的线程池无效
若使用了无界任务队列...corePoolSize,则创建新线程来执行任务(执行这一步需要获取全局锁)
若运行的线程多于或等于corePoolSize,则将任务加入BlockingQueue
若无法将任务加入BlockingQueue...,则创建新的线程来处理任务(执行这一步需要获取全局锁)
若创建新线程将使当前运行的线程超出maximumPoolSize,任务将被拒绝,并调用RejectedExecutionHandler.rejectedExecution...()方法调用都是执行步骤2,而步骤2不需要获取全局锁
#源码分析
/**
* 检查是否可以根据当前池状态和给定的边界(核心或最大)
* 添加新工作线程。