当前位置:网站首页>【无标题】线程三连鞭之“线程池”
【无标题】线程三连鞭之“线程池”
2022-08-04 23:21:00 【小洪正在努力】
线程池
一:为什么要使用线程池?
在实际使用中,创建和销毁线程花费的时间和消耗的系统资源相当大,甚至可能要比处理实际的用户请求的时间和资源开销大。
如果在一个JVM里面创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统的资源不足(OOM)需要采取一些办法来限制任何给定时刻处理的请求数目,尽可能减少创建和销毁线程的次数,特别是一些资源耗费大的线程的创建和销毁,尽量利用已有的对象来进行服务。
因此,引出了线程池。预先创建一组线程,放入池中中,用的时候取出,用完再放回。
Executors 类:提供工厂方法用来创建不同类型的线程池。比如: 1.newSingleThreadExecutor()
创建一个只有一个线程的线程池, 一个任务一个任务执行,一池一线程(例如窗口只能服务一个人,后面来的只能等待)
2.newFixedThreadPool(int N)
创建固定线程数的线程池,
3.newCachedThreadPool()
线程池根据需求创建线程,可扩容,遇强则强(银行一共7个窗口,只开放了3个窗口,其他4个窗口没有开放,如果人很多就要开放其余的窗口,高峰结束再恢复到3个窗口状态)
4.newScheduledThreadPool (了解)
创建一个大小无限的线程池,此线程池支持定时以及周期性执行任务的需求。
场景: 适用于需要多个后台线程执行周期任务的场景

Java里面线程池的顶级接口是 Executor,不过真正的线程池接口是 ExecutorService, ExecutorService 的默认实现是 ThreadPoolExecutor;
二:线程池相关的参数(7个):
- corePoolSize (线程池的核心线程数量也叫常驻线程),一般情况下不管有没有任务都会一直在线程池中存活。
- maximumPoolSize (线程池所能容纳的最大线程数),当活动的线程数达到这个值后,后续的新任务会被阻塞
- keepAliveTime (线程的闲置超时时长)
- unit (时间单位(second等))
- workQueue (任务队列也叫阻塞队列),当核心线程达到最大数量时,并不是直接开启新线程,而是进入阻塞队列中排队等待,如果阻塞队列满,才开启新的线程。
- threadFactory (线程工厂),一个接口,用来为线程池创建新线程。
- RejectedExecutionHandler (拒绝策略)

线程池的关闭
ThreadPoolExecutor 提供了两个方法,用于线程池的关闭,分别是
shutdown() 和 shutdownNow()。
shutdown():不会立即的终止线程池,而是要等所有任务缓存队列中的任务都执行完后才终止,但再也不会接受新的任务。
shutdownNow():立即终止线程池,并尝试打断正在执行的任务,并且清空任务缓存队列,返回尚未执行的任务。
面试题:
1)什么是 Executor 框架?
Executor框架在Java 5中被引入,Executor 框架是一个根据一组执行策略调用、调度、执行和控制的异步任务的框架。
无限制的创建线程会引起应用程序内存溢出,所以创建一个线程池是个更好的的解决方案,因为可以限制线程的数量并且可以回收再利用这些线程。利用 Executor 框架可以非常方便的创建一个线程池。
2)Executors 类是什么?
Executors为Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类提供了一些工具方法。Executors 可以用于方便的创建线程池。
边栏推荐
- Implementing class target method exception using proxy object execution
- 小黑leetcode冲浪:94. 二叉树的中序遍历
- [QNX Hypervisor 2.2用户手册]10.6 vdev mc146818
- 2022年华数杯数学建模
- panic: reflect: reflect.Value.SetString using value obtained using unexported field
- MYS-6ULX-IOT 开发板测评——使用 Yocto 添加软件包
- Pytorch分布式训练/多卡/多GPU训练DDP的torch.distributed.launch和torchrun
- 当panic或者die被执行时,或者发生未定义指令时,如何被回调到
- 未来我们还需要浏览器吗?(feat. 枫言枫语)
- 招标公告 | 海纳百创公众号运维项目
猜你喜欢
随机推荐
typeScript-闭包函数的使用
招标公告 | 海纳百创公众号运维项目
没有这些「伪需求」,产品经理的 KPI 怎么完成?
Shell expect real cases
Develop a SpaceX website based on the Appian low-code platform
生产者消费者问题
kernel hung_task死锁检测机制原理实现
kernel问题定位手段总结
2022年全网最全接口自动化测试框架搭建,没有之一
安全软件 Avast 与赛门铁克诺顿 NortonLifeLock 合并案获英国批准,市值暴涨 43%
Web安全开发 | 青训营笔记
typeScript-部分应用函数
地面高度检测/平面提取与检测(Fast Plane Extraction in Organized Point Clouds Using Agglomerative Hierarchical Clu)
typeScript-promise
【字符串函数内功修炼】strcpy + strcat + strcmp(一)
基于Appian低代码平台开发一个SpaceX网站
文章占位 文章占位
【转载】kill掉垃圾进程(在资源管理器占用的情况下)
Linux系统重启和停止Mysql服务教程
typeScript-promise









