当前位置:网站首页>线程池面试
线程池面试
2022-07-23 02:30:00 【挣脱那枷锁】
线程池
- 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
- 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
- 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源, 还 会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
Executor 框架
Executor框架不仅包括了线程池的管理,还提供了线程工厂、队列以及拒绝策略等。我们创建时,一般使用它的子类ThreadPoolExecutor,是Executor 框架最核心的类
ThreadPoolExecutor构造方法:7个参数

1)corePoolSize, 线程池中的核心线程数,定义了最小可以同时运行的线程数量。2)maximumPoolSize, 最大线程数,队列中存放的任务达到队列容量的时候,当前可以同时运行的线程数量
3)workQueue: 任务队列,当新任务来的时候会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中。
4) keepAliveTime最大空闲时间,当线程池中的线程数量大于corePoolSize的时候,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,而是会等待,直到等待的时间超过了 keepAliveTime 才会被回收销毁
5)TimeUnit unit : keepAliveTime时间单位
6)threadFactory:线程工厂(创建线程)
7) RejectedExecutionHandler handler ) 饱和处理机制
线程池处理流程:
每当有新的任务到线程池时,
1)先判断线程池中当前线程数量是否达到了corePoolSize,若未达到,则新建线程运行此任务,且任务结束后将该线程保留在线程池中,不做销毁处理。若在线程池中的线程数量超过corePoolSize时,每当有线程的空闲时间超过了keepAliveTime,这个线程就会被终止,直到线程池中线程的数量不大于corePoolSize为止;
2) 判断工作队列(workQueue)是否已满,未满,则将新的任务提交到工作队列中,满了则进入下一步;
3) 判断线程池中的线程数量是否达到了maxumunPoolSize,如果未达到,则新建一个工作线程来执行这个任务,如果达到了则使用饱和策略来处理这个任务。
在一般情况下,Java线程池中会长期保持corePoolSize个线程。
要设计一个好的线程池,就必须合理的设置线程池的4个参数::核心线程数,任务队列长度,最大线程数和最大空闲时间
饱和策略,实现 RejectedExecutionHandler 接口。
1)AbortPolicy 中止策略,默认的饱和策略,该策略将抛出未检查RejectedExecutionException。 调用者可以捕获这个异常,然后根据需求编写自己的处理代码。
2)抛弃策略,会悄悄抛弃该任务
3)抛弃最旧策略:会抛弃下一个将被执行的任务,如果工作队列是一个优先队列,那么该策略将导致抛弃优先级最高的任务,因此最好不要将该策略和优先级队列放在一起使用.
4)调用者运行策略,实现了一种调节机制,该策略既不会抛弃任务,也不会抛出异常,而是将某些任务回退到调用者,从而降低新任务的流量。它不会在线程池中执行新的提交任务,而是在一个调用了 execute 的线程中执行该任务。
边栏推荐
- 【Node中间层实践(三)】----模板引擎pug
- CMake入门教程
- 隐藏网站服务器响应头中 PHP 版本信息
- Is the sub database and sub table really suitable for your system? Talk about how to select sub databases, sub tables and newsql
- 适合短视频分享的Fireshare
- 第三方依赖库 AG Grid调研分析
- 在Unity中使用Tessellation
- Peptide nucleic acid (PNA) coupled with membrane penetrating peptides (CCPs) (KFF) 3K to form CCPs PNA | peptide nucleic acid
- DNS and DHCP of network security foundation
- IDM最新版软件的安装下载和使用方法
猜你喜欢

Realize multi-level conditional query (similar to JD multi-level add query)

Peptide modified PNA peptide nucleic acid bz-d-phe-val-arg-pna|l-phe-val-arg-pna

PNA peptide nucleic acid modified polypeptide z-gly-pro-pna | d-phe-pip-arg-pna | TOS Gly Pro Arg PNA

LEADTOOLS 20-22 Crack-DotNetCore!!!

insert引起的db file sequential read之改善

检测Windows安全缺陷工具wesng的学习与使用

How to preserve peptide nucleic acid | peptide nucleic acid containing azobenzene unit (n-pna) | 99Tcm labeled c-myc mRNA

ADAS测试方案

想放弃软件测试了,4年经验去面试10分钟结束,测试现在这么难了?

抖音白天与晚上触发不同特效的Graph节点编写
随机推荐
Peptide nucleic acid (PNA) coupled with membrane penetrating peptides (CCPs) (KFF) 3K to form CCPs PNA | peptide nucleic acid
目前都有哪些年利率6%左右的保本理财产品?
LEADTOOLS 20-22 Crack-DotNetCore!!!
Redis 6.0源码学习 Simple Dynamic String
567. Arrangement of strings
如何做好陪同翻译的工作
CANopen通信----PDO与SDO
How to learn SCM based on zero?
Q-Vision+Kvaser CAN/CAN FD/LIN总线解决方案
Q-vision+kvaser can/can fd/lin bus solution
Installation, configuration and use of sentry
检测Windows安全缺陷工具wesng的学习与使用
毕业1年,放弃实习机会,在家自学软件测试,同学实习刚结束,我已成月薪12k测试工程师
构建一个CPU模拟器
WordPress网站SEO完整教程
ADAS测试方案
【无标题】
ES6 related interview question 3
Airiot Q & A issue 5 | how to use low code business flow engine?
C——结构体