From fdbb9c90f733a6c1b93584c58e00d7c5481d51cd Mon Sep 17 00:00:00 2001 From: zain Date: Sun, 5 Apr 2020 09:27:25 +0800 Subject: [PATCH 1/2] week 5 --- second/week_05/87/Thread.md | 71 +++++++ .../image-20200403165300672.png | Bin 0 -> 99356 bytes second/week_05/87/ThreadPoolExecutor.md | 194 ++++++++++++++++++ 3 files changed, 265 insertions(+) create mode 100644 second/week_05/87/Thread.md create mode 100644 second/week_05/87/ThreadPoolExecutor.assets/image-20200403165300672.png create mode 100644 second/week_05/87/ThreadPoolExecutor.md diff --git a/second/week_05/87/Thread.md b/second/week_05/87/Thread.md new file mode 100644 index 0000000..13bedaf --- /dev/null +++ b/second/week_05/87/Thread.md @@ -0,0 +1,71 @@ +# Thread + +## 构造线程 + +```java +private void init(ThreadGroup g, Runnable target, String name, + long stackSize, AccessControlContext acc, + boolean inheritThreadLocals) { + if (name == null) { + throw new NullPointerException("name cannot be null"); + } + + this.name = name; + // 当前线程就是该线程的父线程 + Thread parent = currentThread(); + SecurityManager security = System.getSecurityManager(); + if (g == null) { + /* Determine if it's an applet or not */ + + /* If there is a security manager, ask the security manager + what to do. */ + if (security != null) { + g = security.getThreadGroup(); + } + + /* If the security doesn't have a strong opinion of the matter + use the parent thread group. */ + if (g == null) { + // 如果ThreadGroup为空就设置父线程组 + g = parent.getThreadGroup(); + } + } + + /* checkAccess regardless of whether or not threadgroup is + explicitly passed in. */ + g.checkAccess(); + + /* + * Do we have the required permissions? + */ + if (security != null) { + if (isCCLOverridden(getClass())) { + security.checkPermission(SUBCLASS_IMPLEMENTATION_PERMISSION); + } + } + + g.addUnstarted(); + + this.group = g; + // 将daemon、priority属性设置为父线程的对应的属性 + this.daemon = parent.isDaemon(); + this.priority = parent.getPriority(); + if (security == null || isCCLOverridden(parent.getClass())) + this.contextClassLoader = parent.getContextClassLoader(); + else + this.contextClassLoader = parent.contextClassLoader; + this.inheritedAccessControlContext = + acc != null ? acc : AccessController.getContext(); + this.target = target; + setPriority(priority); + // 将父线程的InheritableThreadLocal复制过来 + if (inheritThreadLocals && parent.inheritableThreadLocals != null) + this.inheritableThreadLocals = + ThreadLocal.createInheritedMap(parent.inheritableThreadLocals); + /* Stash the specified stack size in case the VM cares */ + this.stackSize = stackSize; + + /* Set thread ID 分配一个线程Id */ + tid = nextThreadID(); +} +``` \ No newline at end of file diff --git a/second/week_05/87/ThreadPoolExecutor.assets/image-20200403165300672.png b/second/week_05/87/ThreadPoolExecutor.assets/image-20200403165300672.png new file mode 100644 index 0000000000000000000000000000000000000000..e2caff8fd4b76a59836b35a0488bbad924018e65 GIT binary patch literal 99356 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

cM72{ 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 MR`$PCUhs_jKcHWxIsgCw literal 0 HcmV?d00001 diff --git a/second/week_05/87/ThreadPoolExecutor.md b/second/week_05/87/ThreadPoolExecutor.md new file mode 100644 index 0000000..103233f --- /dev/null +++ b/second/week_05/87/ThreadPoolExecutor.md @@ -0,0 +1,194 @@ +# ThreadPoolExecutor + +## 是什么?为什么? + +### 线程池是什么? + +> 线程池是一种基于**池化思想**管理线程的工具,经常出现在多线程服务器中,如MySQL。 +> +> 线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配并行执行任务。 +> +> 1. 避免了处理任务时创建销毁线程开销的代价 +> 2. 避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。 + +好处: + + 1. 降低资源消耗: 通过池化技术重复利用已创建的线程,降低线程创建和销毁造成的损耗。 + 2. 提高响应速度: 任务到达时,无需等待线程创建即可立即执行。 + 3. 提高线程的可管理性: 线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会因为线程不合理分布到导致资源调度失衡,降低系统的稳定性。使用线程池可以进行统一的分配、调优和监控。 + 4. 提供更多更强大的功能:线程池具备可拓展性,允许开发人员向其中增加更多的功能。比如延时定时线程池SecheduleThreadPoolExecutor,就允许任务延期执行或定期执行。 + +### 为什么要用线程池? + +1. 频繁申请/销毁资源和调度资源,将带来额外的消耗,可能会非常巨大。 +2. 对资源无限申请缺少抑制手段,易发生系统资源耗尽的风险。 +3. 系统无法合理管理内部资源的分布,会降低系统的稳定性。 + +池化即将资源统一在一起管理的一种思想。 + +计算机领域表现为:统一管理IT资源,包括服务器、存储和网络资源等。通过共享资源,使用户在低投入中获益。除去线程池,还有其他比较经典的几种使用策略: + +1. 内存池(Memory Pooling): 预先申请内存、提升申请内存速度、减少内存碎片。 +2. 连接池(Connection Pooling): 预先申请数据库连接,提升申请链接的速度、降低系统的开销。 +3. 实例池(Object Pooling):循环使用对象,减少资源在初始化和释放时的昂贵损耗。 + +## 设计与实现 + +基于JDK1.8 + +### 总体设计 + +![image-20200403165300672](ThreadPoolExecutor.assets/image-20200403165300672.png) + +--- + + + +Executor: 将任务提交和任务执行进行解耦,用户无需关心如何创建线程,如何调度线程来执行任务,用户只需提供Runnable对象。将Runnable对象提交给Executor,由此框架来完成线程调配和任务的执行。 + +ExecutorService接口: + + 1. 扩充执行任务的能力,补充可以为一个或一批一步任务生成Future的方法 + 2. 提供了管控线程池的方法,比如停止线程池的运行。 + +AbstractExecutorService: + + 1. 将执行任务的流程串联起来,保证下层的实现只需关注一个执行任务的方法即可。 + +ThreadPoolExecutor: + + 1. 维护自身的生命周期 + 2. 管理线程和任务 + + + +线程池内部实际上构建了一个生产者消费者模型,将线程和任务两者解耦,并不知节关联,从而良好的缓冲任务,复用线程。 + +任务管理:(生产者) + + 1. 直接申请线程执行该任务 + 2. 缓冲到队列中等待线程执行 + 3. 拒绝该任务 + +线程管理:(消费者) + + 1. 维护在消费池内,根据任务请求进行线程分配 + 2. 线程执行完成后会去获取新的任务执行 + 3. 获取不到任务,线程就会被回收 + +--- + +### 生命周期管理 + +如何描述线程的生命周期: + +```java +private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNING,0)); +``` + +此变量维护了两个值:运行状态(高3位)和线程数量(低29位) + +避免了为了维护两者的一致,而占用锁资源。 + +```java +// 计算当前运行状态 +private static int runStateOf(int c) { return c & ~CAPACITY;} +// 计算当前线程数量 +private static int workerCountOf(int c) {return c & CAPACITY;} +// 通过状态和线程生成ctl +private static int ctlOf(int rs,int wc) {return rs | wc}; +``` + +运行状态 + +| 运行状态 | 状态描述 | +| ---------- | ------------------------------------------------------------ | +| RUNNING | 能接受新提交的任务,并且也能处理阻塞队列中的任务 | +| SHUTDOWN | 关闭状态,不再接受新提交的任务,但却可以继续处理阻塞队列中已经保存的任务。 | +| STOP | 不能接受新任务,也不处理队列中的任务,会中断正在处理任务的线程。 | +| TIDYING | 所有的任务都已终止了,workerCount(有效线程)为0. | +| TERMINATED | 在terminated()方法执行完成后进入该状态 | + +生命周期转化如图所示: + + + +--- + +### 任务执行机制 + +#### 任务调度 + +任务调度时线程池的主要入口,当用户提交了一个任务,接下来这个任务将如何执行都是由这个阶段决定的。了解这部分就相当于了解了线程池的核心运行机制。 + +首先所有的任务调度都是由execute方法完成的,这部分的工作是:检查现在线程池的运行状态、运行线程数、运行策略,决定接下来执行的流程,是直接申请线程执行,或是缓冲到队列中执行,亦或是直接拒绝该任务。其执行过程如下: + +1. 首先检测线程池运行状态,如果不是RUNNING,则直接拒绝,线程池要保证在RUNNING的状态下执行任务。 +2. 如果workerCount < corePoolSize,则创建并启动一个线程来执行新的提交的任务。 +3. 如果workerCount >= corePoolSize,且线程池内的阻塞队列未满,则将任务添加到该阻塞队列中。 +4. 如果workerCount >= corePoolSize && workerCount < maximumPoolSize,且线程池内的阻塞队列已满,则创建并启动一个线程来执行提交的任务。 +5. 如果workerCount >= maximumPoolSize,并且线程内的阻塞队列已满,则根据拒绝策略来处理该任务,默认的处理方式是直接抛异常。 + +#### 任务缓冲 + +任务缓冲模块是线程池管理任务的核心部分。线程池的本质是对任务和线程的管理,而做到这一点最关键的思想就是将任务和线程两者解耦,不让两者直接关联,才可以做后续的分配工作。线程池中是以生产者消费者模型,通过一个阻塞队列来实现的。阻塞队列缓存任务,工作线程从阻塞队列中获取任务。 + +阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。 + +1. 队列为空时,获取元素的线程会等待队列变为非空。 +2. 队列满时,存储元素的线程会等待队列可用。 + +#### 任务申请 + +1. 任务直接由新创建的线程执行 +2. 线程从任务队列中获取任务然后执行,执行完任务的空闲线程会再次去队列中申请任务再去执行。 + +#### 任务拒绝 + +线程池有一个最大的容量,当线程池的任务缓存队列已满,并且线程池中的线程数目已到达maximumPoolSize,就需要拒绝掉该任务,采取任务拒绝策略,保护线程池。 + +```java +public interface RejectedExecutionHandler { + void rejectedExecution(Runnable r,ThreadPoolExecutor executor); +} +``` + +| 序号 | 名称 | 描述 | +| ---- | ------------------------------ | ------------------------------------------------------------ | +| 1 | ThreadPoolExecutor.AbortPolicy | 丢弃任务并抛出RejectedExecutionException异常。这是线程池默认的拒绝策略 | +| 2 | | | +| 3 | | | +| 4 | | | + + + +### Worker线程管理 + +#### Worker线程 + +线程池为了掌握线程的状态并维护线程的生命周期,设计了线程池内的工作线程Worker + +```java +private final class Worker extends AbstractQueuedSynchronizer implements Runnable { + // Worker 持有线程 + final Thread thread; + // 初始化的任务,可以为空 + Runnable firstTask; +} +``` + + + +#### Worker线程增加 + +#### Worker线程回收 + +#### Worker线程执行任务 + +1. while循环不断地通过getTask方法来获取任务 +2. getTask方法从阻塞队列中获取任务 +3. 如果线程正在停止,那么要保证当前线程的中断状态,否则要保证当前线程不是中断状态 +4. 执行任务 +5. 如果getTask结果为null跳出循环,执行processWorkerExit方法,销毁线程。 + +## 业务实践 \ No newline at end of file -- Gitee From 27938e7b0f0d1e17729a45c512d013b65749a62e Mon Sep 17 00:00:00 2001 From: zain Date: Sun, 5 Apr 2020 23:40:47 +0800 Subject: [PATCH 2/2] week 5 --- second/week_05/87/Executor.md | 18 +++++ second/week_05/87/Foo.java | 26 +++++++ second/week_05/87/FooBar.java | 51 ++++++++++++ .../Thread.assets/image-20200405223906197.png | Bin 0 -> 77443 bytes second/week_05/87/Thread.md | 48 +++++++++++- second/week_05/87/ThreadLocal.md | 73 ++++++++++++++++++ second/week_05/87/ThreadPoolExecutor.md | 29 +++++-- 7 files changed, 238 insertions(+), 7 deletions(-) create mode 100644 second/week_05/87/Executor.md create mode 100644 second/week_05/87/Foo.java create mode 100644 second/week_05/87/FooBar.java create mode 100644 second/week_05/87/Thread.assets/image-20200405223906197.png create mode 100644 second/week_05/87/ThreadLocal.md diff --git a/second/week_05/87/Executor.md b/second/week_05/87/Executor.md new file mode 100644 index 0000000..97b114e --- /dev/null +++ b/second/week_05/87/Executor.md @@ -0,0 +1,18 @@ +# Executor + +引入该接口的主要目的是**解耦任务本身和任务的执行**。我们之前通过线程执行一个任务时,往往需要先创建一个线程,然后调用线程的`start`方法来执行任务 + +```java +public interface Executor { + /** + * 执行给定的Runnable任务. + * 根据Executor的实现不同, 具体执行方式也不相同. + * + * @param command the runnable task + * @throws RejectedExecutionException if this task cannot be accepted for execution + * @throws NullPointerException if command is null + */ + void execute(Runnable command); +} +``` + diff --git a/second/week_05/87/Foo.java b/second/week_05/87/Foo.java new file mode 100644 index 0000000..d60d65e --- /dev/null +++ b/second/week_05/87/Foo.java @@ -0,0 +1,26 @@ +class Foo { + private Semaphore seam01 = new Semaphore(0); + private Semaphore seam02 = new Semaphore(0); + public Foo() { + + } + + public void first(Runnable printFirst) throws InterruptedException { + // printFirst.run() outputs "first". Do not change or remove this line. + printFirst.run(); + seam01.release(); + } + + public void second(Runnable printSecond) throws InterruptedException { + seam01.acquire(); + // printSecond.run() outputs "second". Do not change or remove this line. + printSecond.run(); + seam02.release(); + } + + public void third(Runnable printThird) throws InterruptedException { + seam02.acquire(); + // printThird.run() outputs "third". Do not change or remove this line. + printThird.run(); + } +} diff --git a/second/week_05/87/FooBar.java b/second/week_05/87/FooBar.java new file mode 100644 index 0000000..4d0aa2b --- /dev/null +++ b/second/week_05/87/FooBar.java @@ -0,0 +1,51 @@ + class FooBar { + private int n; + private Lock lock = new ReentrantLock(); + private Condition condition = lock.newCondition(); + private boolean isEmpty = true; + + public FooBar(int n) { + this.n = n; + } + + //类似生产者offer数据 + public void foo(Runnable printFoo) throws InterruptedException { + + lock.lock(); + + for (int i = 0; i < n; i++) { + + while (!isEmpty) { + condition.await(); + } + // printFoo.run() outputs "foo". Do not change or remove this line. + printFoo.run(); + isEmpty = false; + + condition.signal(); + + } + lock.unlock(); + + } + + //类似消费者take数据 + public void bar(Runnable printBar) throws InterruptedException { + lock.lock(); + + for (int i = 0; i < n; i++) { + + while (isEmpty) { + condition.await(); + } + // printBar.run() outputs "bar". Do not change or remove this line. + printBar.run(); + isEmpty = true; + + condition.signal(); + + } + lock.unlock(); + + } + } diff --git a/second/week_05/87/Thread.assets/image-20200405223906197.png b/second/week_05/87/Thread.assets/image-20200405223906197.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb95f9a5171211210b52a5b41f3d10a4b71eb17 GIT binary patch literal 77443 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%0DvSA%AD)nYDn7`Imsw>ZNy6%7<=&5bJ*%y5isU8 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 b_k;iJ4c0TW@37c&FaUw4tDnm{r-UW|7aHHO literal 0 HcmV?d00001 diff --git a/second/week_05/87/Thread.md b/second/week_05/87/Thread.md index 13bedaf..0540598 100644 --- a/second/week_05/87/Thread.md +++ b/second/week_05/87/Thread.md @@ -68,4 +68,50 @@ private void init(ThreadGroup g, Runnable target, String name, /* Set thread ID 分配一个线程Id */ tid = nextThreadID(); } -``` \ No newline at end of file +``` + +![image-20200405223906197](Thread.assets/image-20200405223906197.png) + +- New: 至今尚未启动的线程的状态。 +- Runnable :可运行线程的线程状态。 +- Blocked :受阻塞并且正在等待监视器锁的某一线程的线程状态。 +- Waiting :某一等待线程的线程状态。 +- Timed_waiting:具有指定等待时间的某一等待线程的线程状态。 +- Terminated:已终止线程的线程状态。线程已经结束执行。 + + + + + +```java +// 创建 +Thread thread = New Thread(); +Thread thread = New Thread(String name); +Thread thread = New Thread(Runnable target); +Thread thread = New Thread(Runnable target, String name); + +// 动态方法 +thread.isAlive();// 测试线程是否处于活动状态 +thread.start();// 开始执行线程,JVM 调用该线程的 run 方法 +thread.setName(String name);// 改变线程名称 +thread.getName();// 获取线程名称 +thread.setPriority(int priority);// 更改线程的优先级 +/* 具有较高优先级的线程应该在低优先级的线程之前分配处理器时间,然而,线程优先级不能保证线程执行的顺序,而且非常依赖于平台 + Thread.MIN_PRIORITY 1 + Thread.NORM_PRIORITY 5(默认) + Thread.MAX_PRIORITY 10 */ +thread.getPriority();// 获取线程的优先级 +thread.setDaemon(boolean on);// 将该线程标记为守护线程。守护线程是服务提供者线程,当 JVM 检测到应用程序中的所有线程都只是守护线程时,它将退出应用程序 +thread.isDaemon();// 测试是否为守护线程 +thread.join(long millisec);// 等待该线程终止的时间。假设有两个线程 t1 和 t2,如果线程 t1 调用 t2.join(),线程 t1 开始等待,直到线程 t2 终止,t1 才会继续执行 +thread.interrupt();// 尝试中断线程 + +// 静态方法 +Thread.currentThread();// 返回对当前正在执行的线程对象的引用 +Thread.yield();// 尝试暂停当前正在执行的线程对象,并执行其他线程。该线程放弃当前对处理器的使用 +Thread.sleep(long millisec);// 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。如果线程在进入休眠之前拥有锁的所有权,则它在休眠期间继续保持这些锁 +Thread.interrupted();// 测试线程是否中断 +Thread.holdsLock(Object o);// 返回 boolean 类型,当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true +Thread.dumpStack();// 将当前线程的堆栈跟踪打印至标准错误流 +``` + diff --git a/second/week_05/87/ThreadLocal.md b/second/week_05/87/ThreadLocal.md new file mode 100644 index 0000000..8f39bc7 --- /dev/null +++ b/second/week_05/87/ThreadLocal.md @@ -0,0 +1,73 @@ +# ThreadLocal + +它提供线程本地变量,如果创建一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个副本,在实际多线程操作的时候,操作的是自己本地内存中的变量,从而规避了线程安全问题。 + + + +## set + +```java +public void set(T value) { + //(1)获取当前线程(调用者线程) + Thread t = Thread.currentThread(); + //(2)以当前线程作为key值,去查找对应的线程变量,找到对应的map + ThreadLocalMap map = getMap(t); + //(3)如果map不为null,就直接添加本地变量,key为当前线程,值为添加的本地变量值 + if (map != null) + map.set(this, value); + //(4)如果map为null,说明首次添加,需要首先创建出对应的map + else + createMap(t, value); +} +``` + +## get + +```java +public T get() { + //(1)获取当前线程 + Thread t = Thread.currentThread(); + //(2)获取当前线程的threadLocals变量 + ThreadLocalMap map = getMap(t); + //(3)如果threadLocals变量不为null,就可以在map中查找到本地变量的值 + if (map != null) { + ThreadLocalMap.Entry e = map.getEntry(this); + if (e != null) { + @SuppressWarnings("unchecked") + T result = (T)e.value; + return result; + } + } + //(4)执行到此处,threadLocals为null,调用该更改初始化当前线程的threadLocals变量 + return setInitialValue(); +} + +private T setInitialValue() { + //protected T initialValue() {return null;} + T value = initialValue(); + //获取当前线程 + Thread t = Thread.currentThread(); + //以当前线程作为key值,去查找对应的线程变量,找到对应的map + ThreadLocalMap map = getMap(t); + //如果map不为null,就直接添加本地变量,key为当前线程,值为添加的本地变量值 + if (map != null) + map.set(this, value); + //如果map为null,说明首次添加,需要首先创建出对应的map + else + createMap(t, value); + return value; +} +``` + +## remove + +```java +public void remove() { + //获取当前线程绑定的threadLocals + ThreadLocalMap m = getMap(Thread.currentThread()); + //如果map不为null,就移除当前线程中指定ThreadLocal实例的本地变量 + if (m != null) + m.remove(this); + } +``` + diff --git a/second/week_05/87/ThreadPoolExecutor.md b/second/week_05/87/ThreadPoolExecutor.md index 103233f..c96abe3 100644 --- a/second/week_05/87/ThreadPoolExecutor.md +++ b/second/week_05/87/ThreadPoolExecutor.md @@ -153,12 +153,12 @@ public interface RejectedExecutionHandler { } ``` -| 序号 | 名称 | 描述 | -| ---- | ------------------------------ | ------------------------------------------------------------ | -| 1 | ThreadPoolExecutor.AbortPolicy | 丢弃任务并抛出RejectedExecutionException异常。这是线程池默认的拒绝策略 | -| 2 | | | -| 3 | | | -| 4 | | | +| 序号 | 名称 | 描述 | +| ---- | -------------------------------------- | ------------------------------------------------------------ | +| 1 | ThreadPoolExecutor.AbortPolicy | 丢弃任务并抛出RejectedExecutionException异常。这是线程池默认的拒绝策略 | +| 2 | ThreadPoolExecutor.DiscardPolicy | 丢弃任务,但是不抛出异常,使用此策略,可能会是我们无法发现系统的异常状态。建议是一些无关紧要的业务采用此策略 | +| 3 | ThreadPoolExecutor.DiscardOldestPolicy | 丢弃队列最前面的任务,然后重新提交被拒绝的任务,是否采用此种拒绝策略,还得根据实际业务是否允许丢弃老任务来认真衡量 | +| 4 | ThreadPoolExecutor.CallerRunsPolicy | 由调用线程(提交任务的线程)处理该任务,这种情况是需要让所有任务都执行完毕,那么就适合大量计算的任务类型去执行,多线程仅仅是增大吞吐量的手段,最终必须要让每个任务都执行完毕。 | @@ -181,8 +181,25 @@ private final class Worker extends AbstractQueuedSynchronizer implements Runnabl #### Worker线程增加 +增加线程是通过线程池中的addWorker方法,该方法的功能就是增加一个线程,该方法不考虑线程池是在哪个阶段增加的该线程,这个分配线程的策略是在上个步骤完成的,该步骤仅仅完成增加线程,并使它运行,最后返回是否成功这个结果。addWorker方法有两个参数:firstTask、core。firstTask参数用于指定新增的线程执行的第一个任务,该参数可以为空;core参数为true表示在新增线程时会判断当前活动线程数是否少于corePoolSize,false表示新增线程前需要判断当前活动线程数是否少于maximumPoolSize, + #### Worker线程回收 +线程池中线程的销毁以来JVM自动的回收,线程池做的工作是根据当前线程池的状态维护一定数量的 线程引用,防止这部分线程被JVM回收,当线程池决定哪些线程需要回收时,只需要将其饮用消除即可。Worker被创建出来后,就会不断进行轮询,然后获取任务去执行,核心线程可以无限等待获取任务,非核心线程要限时获取任务。当Worker无法获取到任务,也就是获得任务为空时,循环会结束,worker会主动消除自身在线程池内的引用。 + +```java +try { + while (task != null || (task = getTask() != null)) { + // 执行任务 + } +}finally { + // 获取不到任务时,主动回收自己 + processWorkerExit(w, completedAbruptly); +} +``` + + + #### Worker线程执行任务 1. while循环不断地通过getTask方法来获取任务 -- Gitee