Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7ee7ffa

Browse files
Update java线程池学习总结.md
1 parent 9b9575d commit 7ee7ffa

File tree

1 file changed

+49
-7
lines changed

1 file changed

+49
-7
lines changed

‎docs/java/Multithread/java线程池学习总结.md‎

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,47 @@
1+
<!-- TOC -->
2+
3+
- [一 使用线程池的好处](#一-使用线程池的好处)
4+
- [二 Executor 框架](#二-executor-框架)
5+
- [2.1 简介](#21-简介)
6+
- [2.2 Executor 框架结构(主要由三大部分组成)](#22-executor-框架结构主要由三大部分组成)
7+
- [1) 任务(`Runnable` /`Callable`)](#1-任务runnable-callable)
8+
- [2) 任务的执行(`Executor`)](#2-任务的执行executor)
9+
- [3) 异步计算的结果(`Future`)](#3-异步计算的结果future)
10+
- [2.3 Executor 框架的使用示意图](#23-executor-框架的使用示意图)
11+
- [三 (重要)ThreadPoolExecutor 类简单介绍](#三-重要threadpoolexecutor-类简单介绍)
12+
- [3.1 ThreadPoolExecutor 类分析](#31-threadpoolexecutor-类分析)
13+
- [3.2 推荐使用 `ThreadPoolExecutor` 构造函数创建线程池](#32-推荐使用-threadpoolexecutor-构造函数创建线程池)
14+
- [四 (重要)ThreadPoolExecutor 使用示例](#四-重要threadpoolexecutor-使用示例)
15+
- [4.1 示例代码:`Runnable`+`ThreadPoolExecutor`](#41-示例代码runnablethreadpoolexecutor)
16+
- [4.2 线程池原理分析](#42-线程池原理分析)
17+
- [4.3 几个常见的对比](#43-几个常见的对比)
18+
- [4.3.1 `Runnable` vs `Callable`](#431-runnable-vs-callable)
19+
- [4.3.2 `execute()` vs `submit()`](#432-execute-vs-submit)
20+
- [4.3.3 `shutdown()`VS`shutdownNow()`](#433-shutdownvsshutdownnow)
21+
- [4.3.2 `isTerminated()` VS `isShutdown()`](#432-isterminated-vs-isshutdown)
22+
- [4.4 加餐:`Callable`+`ThreadPoolExecutor`示例代码](#44-加餐callablethreadpoolexecutor示例代码)
23+
- [五 几种常见的线程池详解](#五-几种常见的线程池详解)
24+
- [5.1 FixedThreadPool](#51-fixedthreadpool)
25+
- [5.1.1 介绍](#511-介绍)
26+
- [5.1.2 执行任务过程介绍](#512-执行任务过程介绍)
27+
- [5.1.3 为什么不推荐使用`FixedThreadPool`?](#513-为什么不推荐使用fixedthreadpool)
28+
- [5.2 SingleThreadExecutor 详解](#52-singlethreadexecutor-详解)
29+
- [5.2.1 介绍](#521-介绍)
30+
- [5.2.2 执行任务过程介绍](#522-执行任务过程介绍)
31+
- [5.2.3 为什么不推荐使用`FixedThreadPool`?](#523-为什么不推荐使用fixedthreadpool)
32+
- [5.3 CachedThreadPool 详解](#53-cachedthreadpool-详解)
33+
- [5.3.1 介绍](#531-介绍)
34+
- [5.3.2 执行任务过程介绍](#532-执行任务过程介绍)
35+
- [5.3.3 为什么不推荐使用`CachedThreadPool`?](#533-为什么不推荐使用cachedthreadpool)
36+
- [六 ScheduledThreadPoolExecutor 详解](#六-scheduledthreadpoolexecutor-详解)
37+
- [6.1 简介](#61-简介)
38+
- [6.2 运行机制](#62-运行机制)
39+
- [6.3 ScheduledThreadPoolExecutor 执行周期任务的步骤](#63-scheduledthreadpoolexecutor-执行周期任务的步骤)
40+
- [七 参考](#七-参考)
41+
- [八 其他推荐阅读](#八-其他推荐阅读)
42+
43+
<!-- /TOC -->
44+
145
## 一 使用线程池的好处
246

347
> **池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。**
@@ -651,12 +695,10 @@ Wed Nov 13 13:40:43 CST 2019::pool-1-thread-5
651695

652696
## 六 ScheduledThreadPoolExecutor 详解
653697

654-
这个在实际项目中基本不会被用到,所以对这部分大家只需要简单了解一下它的思想。
698+
**`ScheduledThreadPoolExecutor` 主要用来在给定的延迟后运行任务,或者定期执行任务。**这个在实际项目中基本不会被用到,所以对这部分大家只需要简单了解一下它的思想。关于如何在Spring Boot 中 实现定时任务,可以查看这篇文章[《5分钟搞懂如何在Spring Boot中Schedule Tasks》](https://github.com/Snailclimb/springboot-guide/blob/master/docs/advanced/SpringBoot-ScheduleTasks.md)
655699

656700
### 6.1 简介
657701

658-
**`ScheduledThreadPoolExecutor` 主要用来在给定的延迟后运行任务,或者定期执行任务。**
659-
660702
**`ScheduledThreadPoolExecutor` 使用的任务队列 `DelayQueue` 封装了一个 `PriorityQueue`,`PriorityQueue` 会对队列中的任务进行排序,执行所需时间短的放在前面先被执行(`ScheduledFutureTask``time` 变量小的先执行),如果执行所需时间相同则先提交的任务将被先执行(`ScheduledFutureTask``squenceNumber` 变量小的先执行)。**
661703

662704
**`ScheduledThreadPoolExecutor``Timer` 的比较:**
@@ -688,10 +730,10 @@ Wed Nov 13 13:40:43 CST 2019::pool-1-thread-5
688730

689731
![ScheduledThreadPoolExecutor执行周期任务的步骤](https://imgconvert.csdnimg.cn/aHR0cDovL215LWJsb2ctdG8tdXNlLm9zcy1jbi1iZWlqaW5nLmFsaXl1bmNzLmNvbS8xOC01LTMwLzU5OTE2Mzg5LmpwZw?x-oss-process=image/format,png)
690732

691-
1. 线程 1 从 DelayQueue 中获取已到期的 ScheduledFutureTask(DelayQueue.take())。到期任务是指 ScheduledFutureTask 的 time 大于等于当前系统的时间;
692-
2. 线程 1 执行这个 ScheduledFutureTask;
693-
3. 线程 1 修改 ScheduledFutureTask 的 time 变量为下次将要被执行的时间;
694-
4. 线程 1 把这个修改 time 之后的 ScheduledFutureTask 放回 DelayQueue 中(DelayQueue.add())。
733+
1. 线程 1 从 `DelayQueue` 中获取已到期的 `ScheduledFutureTask(DelayQueue.take())`。到期任务是指 `ScheduledFutureTask `的 time 大于等于当前系统的时间;
734+
2. 线程 1 执行这个 `ScheduledFutureTask`;
735+
3. 线程 1 修改 `ScheduledFutureTask` 的 time 变量为下次将要被执行的时间;
736+
4. 线程 1 把这个修改 time 之后的 `ScheduledFutureTask` 放回 `DelayQueue` 中(`DelayQueue.add()`)。
695737

696738
## 七 参考
697739

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /