线程池就是事先将多个线程对象放到一个容器中,当时用的时候就不用new线程而是直接去线程池中拿对象就行,节省了了开辟子线程的时间,提高代码执行效率,
优点:
① 节省了创建线程的时间,提高相应速度
② 降低了资源消耗
③ 提高了线程的可管理性,使用线程池可以统一的分配和管理
启动策略
线程池刚创建的时候,里面没有一个线程,任务对列是作为参数传递进来的
当我们使用execute添加任务时会首先判断正在运行的线程数是否大于核心线程数,小于则直接创建线程执行任务.等于则假如任务队列等待执行,
若正在执行线程数等于核心线程数,任务对列也满了,则开启新的线程
若正在运行的线程数大于或等于最大线程数,任务对列已满,则抛出异常
四种线程池
① newCachedThreadPool创建一个可缓存线程池,若线程池长度超过处理需要则回收空线程
② newFixedThreadPoo 创建一个定长线程池,控制线程最大并发数,超出的线程会再队列中等待
③ newScheduledThreadPool 创建一个定长线程池,支持定时级周期性执行任务
④ newSingleThreadExecutor创建一个单线程化的线程池,他会用唯一的线程执行工作任务,保证所有任务按照指定的顺序来执行(优先级)