多线程之创建线程

本文详细解析了线程池的工作原理,包括核心线程与非核心线程的区别,任务执行流程,以及线程池如何在任务完成后进行线程回收。以ArrayBlockingQueue为例,阐述了线程池内部的任务分配与调度机制。

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

1、继承Thread重写run方法

2、实现runnable

 

3、线程池

1、各参数解释如下,偷个懒吧,构造方法不止一个

 

2、任务执行过程

execute、submit

下面看下execute源码

1、判断当前线程池中核心线程数,如果核心线程数 小于定义的数量直接新建线程

 

2、如果核心线程等于定义的线程,就放入队列

3、如果队列满了,就会走else分支,创建非核心线程

4、如果添加失败就执行拒绝策略

5、接下来看下一个任务工作完成后线程池是如何工作的

上面有说到创建线程的两个方式,线程池是传入了runnable的实现类,我们来看下这个实现类的run方法

worker中的run方法如下

所以当task执行完后会在获取task,当然了里面会判断线程池是否shutdown等标志

以ArrayBlockingQueue为例,

6、如果((线程池内线程数量 > 核心线程)或者(允许核心线程超时切等待任务时间超过定义时间))并且有(超过一个线程或者队列为空 )就返回null

7、返回null就跳出了上面的while循环线程就会回收,通过上面图片也可以看出如果核心线程不允许回收当线程池 == 核心线程是就会阻塞线程,直到加入队列时offer调用了notEmpty.signal();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值