线程池基础知识
线程池
1.什么是线程池?
线程池:线程池是一个容器,提前保存大量线程资源,以备不时之需。就是提前创建一批线程,当有任务时选个线程执行任务
2.线程池工作原理?
线程池可以设置,核心线程数,最大线程数,非核心线程空闲存活时间,任务队列,拒绝策略拒绝策略等,当有任务时先是核心线程进行工作,若还有任务没有执行,会进入等待队列,等待队列若满了,会创建非核心线程执行任务,如果线程数达到最大,则会执行拒绝策略。
3.线程池的核心参数
核心线程数,最大线程数,非核心线程空闲存活时间,任务队列,拒绝策略,非核心线程空闲存活时间单位。
4.线程池的核心参数怎么设置?
核心线程参数是不固定的,项目的并发高低决定着怎么设置核心线程参数,
核心线程数:常规任务:cpu核心数+1
io密集型:两倍的cpu的核心数
最大线程数:根据负载和任务突发量设置(通常是corePoolSize的2倍)
非核心线程空闲回收时间:突发流量场景:30s~60s 稳定流量:0(不回收核心线程)
workQueue:选择有界队列避免OOM
拒绝策略:根据业务需求选择
5.任务等待队列你知道有哪几种,区别是什么?
ArrayBlockQueue :有界队列,安全,避免OOm,支持公平性设置(默认非公平的)
linkedBlockQueue:可设置有界无界,可能发生oom(
SynchronousQue