Files
logseq-old/journals/2024_06_01.md
2024-06-17 22:24:52 +08:00

26 lines
1.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
- [[The Anxious Generation]]
- {{cards [[java]] }}
- 线程池中提交一个任务的流程是怎样的? #card #java
- 使用 {{cloze execute}} 来提交一个任务,使用 {{cloze submit}} 后会放在 {{cloze 一个Future里面}} ,返回 {{cloze 一个Future}}
- 提交之后判断 {{cloze 当前woker数量}} 是否达到 {{cloze 最大核心线程数}} ,没有达到就创建线程并执行任务
- 如果该数值已经达到最大值,就将该任务放入 {{cloze 阻塞队列}}
- 如果 {{cloze 阻塞队列已满}} , addWorker创建新的线程如果达到 {{cloze 最大线程数}} ,就执行 {{cloze 拒绝策略}} ,默认为 {{cloze RejectedExecutionHandler达到最大就抛出异常}}
-
- 线程池中有 {{cloze 5}} 种状态,分别是如何变化的 #card #java
- 线程池中使用一个 {{cloze Atomic类型的ctl}} 变量来存储状态
- 共有以下5个状态
- RUNNING {{cloze 运行中的状态,此时会接受新提交的任务}}
- SHUTDOWN {{cloze 不再接受新的任务,已有的任务会继续执行完成}}
- STOP {{cloze 不接受新任务,并且立即中止正在执行的任务}}
- TIDYING {{cloze 所有线程都中止后,会进入该状态,等待关闭}}
- TERMINATED {{cloze 执行了terminated()方法后即进入该状态}}
- 如何优雅地停止一个线程 #card #java
- 开启一个线程
- 无返回值,使用 {{cloze execute}}
- 有返回值,使用 {{cloze submit}}
- 使用thread对象的 {{cloze stop()}} 方法 `false`
- 该方法会直接停止,已废弃,会释放 {{cloze synchronized锁}},但是不会释放 {{cloze ReentrantLock锁}}
- 使用 {{cloze interrupt}} 方法 `true`
- 通过 {{cloze Thread.getCurrent.isInterrupted}} 可以接受到中断的信号,但是由线程自己控制是否中止
- 睡眠时被中断会抛出 {{cloze InterruptedException}}
-