Java 线程池原理
核心线程 corePoolSize
队列
最大线程数 maximumPoolSize
线程池内无任务,队列作为参数,就算队列里面有任务,线程池也不会马上执行它们。
新任务提交到线程池:
1、核心线程池的线程未都执行任务,创建线程执行。(
当一个线程完成任务时,它会从队列中取下一个任务来执行。
当一个线程无事可做,超过一定的时间(keepAliveTime)时,线程池会判断,如果当前运行的线程数大于 corePoolSize,那么这个线程就被停掉。所以线程池的所有任务完成后,它最终会收缩到 corePoolSize 的大小。)
2、核心线程池满,加入执行队列。
3、队列满,最大线程池满,交给饱和策略处理:
饱和策略:
直接抛出异常;
只用调用者所在线程来运行任务;
丢弃队列里最近的一个任务,并执行当前任务;
不处理,丢弃掉。