线程池
目的是提高效率
直接创建/销毁线程,需要用户态+内核态配合完成,线程池/协程创建和销毁只通过用户态即可,不需要内核态的配合
直接调用api创建/销毁线程,这个过程需要内核完成,但是内核完成的工作很多时候是不太可控的。
通过使用线程池提前把线程都创建好放到用户态代码中写的数据结构里面,后面要用的时候随时从池子里取,用完了再放回池子里,这个过程完全是用户态代码,不需要和内核进行交互
标准库线程池(面试考点)
ThreadPoolExecutor
标准库的线程池把线程分成两类:
1.核心线程(corePoolSize)
2.非核心线程(maximumPoolSize)
线程池会提供一个submit方法往里面添加任务,每个任务都是一个Runnable
任务较多时线程池会创建新线程,但不能超过最大线程数
在实际开发中需要根据实验来找到一个合适大小的值
BlockingQueue线程池的任务队列
线程池会提供submit方法,让其他线程把任务提交给线程池
相当于把任务放到一个队列里保存起来
ThreadFactor工厂模式
threadFactory是标准库中提供用来创建线程的工厂类
RejectedExecutionHandler
拒绝策略就是一个枚举类型