多线程线程池
·
服务器处理的请求量增多,创建/销毁线程频繁,开销太大—>把线程提前创建好,放在线程池,用的时候直接取,更高效。
为什么从线程池取线程比操作系统调用api创建线程更高效?
内核态,用户态
操作系统可看作:1.内核(操作系统的核心功能所在,如进程管理操作 )2.配套的应用程序(文件资源管理器,画图等)
t.start()——用户态,内核态,用户态,有一定的开销,操作系统在用户态为了让应用程序运行的更稳定,把cpu的部分功能禁止
用线程池,把线程通过系统的api创建好,放在一个集合类中,使用时直接使用集合类中的线程。
但如果线程池的线程过多,线程的调度开销非常大,可能拖慢效率,所以用协程(轻量级线程))
Java标准库提供了现成的线程池,java.util.concurrent(并发)包下的ThreadPoolExecutor类
构造方法的参数:n
线程池中的线程分为核心线程和非核心线程,最大小线程数,自动扩容/缩容
非线程核心允许空闲的最大时间
任务队列
线程工厂
工厂模式(工厂类,工厂方法),工厂设计模式是为了解决构造方法的问题,Thread Factory是Thread类的工厂类,这个类会提供那个多个方法创建出Thread对象, 使用工厂模式是为了统一设置线程的属性
拒绝策略:任务队列的长度是有上限的,如果队已满,继续添加新任务,此时就会触发拒绝策略
4种拒绝策略
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)