当前位置:网站首页>【无标题】线程三连鞭之“线程池”
【无标题】线程三连鞭之“线程池”
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 可以用于方便的创建线程池。
边栏推荐
猜你喜欢
随机推荐
逆序对的数量
NebulaGraph v3.2.0 Release Note, many optimizations such as the performance of querying the shortest path
Will we still need browsers in the future?(feat. Maple words Maple language)
MySQL增删改查基础
使用代理对象执行实现类目标方法异常
OPENCV学习DAY8
年薪50W+的测试工程师都在用这个:Jmeter 脚本开发之——扩展函数
【字符串函数内功修炼】strlen + strstr + strtok + strerror(三)
当panic或者die被执行时,或者发生未定义指令时,如何被回调到
407. 接雨水 II
Uniapp dynamic sliding navigation effect demo (finishing)
The role of @ Import annotations as well as how to use
[Paper Notes KDD2021] MixGCF: An Improved Training Method for Graph Neural Network-based Recommender Systems
未来我们还需要浏览器吗?(feat. 枫言枫语)
Nuclei(二)进阶——深入理解workflows、Matchers和Extractors
加解密在线工具和进制转化在线工具
Vscode连接远程服务器(一套配置成功)
Qt中的常用控件
2022/8/3
3年,从3K涨薪到20k?真是麻雀啄了牛屁股 — 雀食牛逼呀









