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

被折叠的 条评论
为什么被折叠?



