当前位置:网站首页>【无标题】线程三连鞭之“线程池”
【无标题】线程三连鞭之“线程池”
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 可以用于方便的创建线程池。
边栏推荐
猜你喜欢
随机推荐
web3.js
Go 语言快速入门指南:什么是 TSL 安全传输层
2022/8/3
MySQL基础篇【聚合函数】
Controller层代码这么写,简洁又优雅!
测试技术:关于上下文驱动测试的总结
文献阅读十——Detect Rumors on Twitter by Promoting Information Campaigns with Generative Adversarial Learn
Basic web in PLSQL
xss总结
【七夕快乐篇】Nacos是如何实现服务注册功能的?
Bidding Announcement | Operation and Maintenance Project of Haina Baichuang Official Account
Pytest learning - fixtures
PAN3020 Sub-1G无线收发芯片
仪表板展示 | DataEase看中国:数据呈现中国资本市场
轮播图动态渲染
2022年华数杯数学建模
MySQL的JSON 数据类型2
kernel问题定位手段总结
PID Controller Improvement Notes No. 7: Improve the anti-overshoot setting of the PID controller
Since a new byte of 20K came out, I have seen what the ceiling is