项目最近遇到页面接口特别多的情况,特写此文
线程池的优势毋庸置疑:
1)重用线程池中的线程,避免大量的线程的创建和销毁所带来的性能开销。
2)能有效的控制线程的最大并发数,避免大量的线程之间因互相抢占系统资源而导致的阻塞现象
3)能够对线程进行简单的管理,并提供定时执行以及指定建个循环执行等功能
ThreadPoolExcutor是线程池的真正实现。他执行任务时大致遵循如下规则:
1)如果线程池中的线程数量未达到核心线程数量,那么会直接启动核心线程来开启任务。
2)如果线程池中的线程数量已经达到或者超过核心线程数量,那么任务会插入到任务队列中排队等待执行。
3)如果在2中无法将任务插入到任务队列中,往往是由于任务队列已满,这个时候如果线程数量未到线程数量的最大值,那么会立刻开启非核心线程来执行任务
4)如果线程池中线程数量已经达到最大值,那么就拒绝执行此任务,
四类常见的线程池
newFixedThreadPool:都是核心线程,数量固定,即使线程空闲,并不会被回收,无超时机制,任务队列无限制
newCachedThreadPool:只有非核心线程,数量不固定,超时时长60s,
newscheduledThreadPool:核心线程数量固定,非核心线程数量无限制,非核心线程空闲时,会立即被回收
newSingledThreadPool:内部只有一个核心线程

网友评论