线程池(一) -- 通过类图简单介绍ThreadPoolExecutor

本文详细解析了Java线程池的工作原理,包括其内部结构、设计模式的应用、线程工厂、工作线程、饱和策略等关键组件。阐述了线程池如何通过不同状态的转换来控制任务的执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程池用起来比较简单,但其内部就像一台仪器,需要各个部分相互协作来完成相应的功能。设计模式就用了工厂模式、策略模式、代理模式以及模板模式。ThreadPoolExecutor类图如下:

线程池类图

DefaultThreadFactory是线程工厂,实现了ThreadFactory,其中newThread()方法是创建线程的方法,这里使用了工厂模式,封装了线程的创建过程。

poolNumber用来统计线程工厂的个数,同时也是线程池名称的一部分;

threadNumber用来记录每个线程工厂创建了多少个线程,是线程名称的一部分。

 

Worker继承了AQS,实现了Runnable接口,这里使用了代理模式,对任务线程的run()方法进行了加强。WorKer继承了AQS,自己实现了简单的不可重入锁,其中state=0表示锁未被获取状态,state=1表示锁已经被获取的状态,state=-1是创建Worker时默认的状态,创建时设置为-1是为了避免该线程在运行runWorker()方法前被中断。

firstTast:记录了该工作线程执行的第一个任务

thread:是需要执行的任务线程

 

RejectedExecutionHandler:饱和策略,当队列满并且线程个数达到maximumPoolSize后采取的策略,这里使用了策略模式。

AbortPolicy:抛出异常(默认情况下使用该策略)

CallerRunsPolicy:使用调用者所在线程运行任务

DiscardOldestPolicy:调用poll弹出BlockingQueue的队头元素,执行当前任务

DiscardPolicy:默默丢弃,抛出异常

 

ThreadPoolExecutor继承了AbstractExecutorService,AbstractExecutorService中的submit()方法使用了模板模式。重要属性其含义如下。

corePoolSize:线程池核心线程数

maximumPoolSize:线程池的最大线程数

workQueue:阻塞队列,用来存放任务线程

threadFactory:线程工厂,用来创建线程

handler:饱和策略,默认情况下使用AbortPolicy

keepAliveTime:存活时间。如果线程池中的线程数量比核心线程数量多,并且是闲置状态,这些线程的最大存活时间

TimeUnit:存活时间的单位

clt:用来记录线程池中线程的个数和线程池的状态。线程池通过线程池的状态来控制任务的执行。

线程池的状态如下:

RUNNING:接受新任务并处理阻塞队列中的任务线程

SHUTDOWN:拒绝新任务但是处理阻塞队列中的任务

STOP:拒绝新任务并抛弃阻塞队列中的任务,同时中断正在处理的任务

TIDYING:所有任务执行完(包含阻塞队列里的任务)后,当前线程池活动线程数为0,将调用terminated()方法

TERMINATED:终止状态,调用terminated方法执行完后的状态。

线程池状态的转换

RUNNING -->SHUTDOWN:显示调用shutdown()方法,获取隐式调用finalize()方法里面的shutdown()方法

RUNNING或SHUTDOWN)-->STOP:显示调用shutdownNow()方法

SHUTDOWN --> TIDYING :当线程池和任务队列都为空时

STOP-->TIDYING:当线程池为空时

TIDYING -->TERMINATED:当terminated()方法执行后

 

参考:《java并发编程之美》

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值