Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
月凉、
JavaGuide
提交
08cc656f
J
JavaGuide
项目概览
月凉、
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
08cc656f
编写于
9月 26, 2021
作者:
HDU鬼先生
提交者:
GitHub
9月 26, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update Java并发进阶常见面试题总结.md
文本和描述通顺性修正
上级
a2479a77
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
5 addition
and
5 deletion
+5
-5
docs/java/multi-thread/Java并发进阶常见面试题总结.md
docs/java/multi-thread/Java并发进阶常见面试题总结.md
+5
-5
未找到文件。
docs/java/multi-thread/Java并发进阶常见面试题总结.md
浏览文件 @
08cc656f
...
...
@@ -465,14 +465,14 @@ static class Entry extends WeakReference<ThreadLocal<?>> {
### 4.1. 为什么要用线程池?
> **池化技术
相比
大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。**
> **池化技术
想必
大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。**
**线程池**
提供了一种限制和管理资源(包括执行一个任务)。 每个
**线程池**
还维护一些基本统计信息,例如已完成任务的数量。
这里借用《Java 并发编程的艺术》提到的来说一下
**使用线程池的好处**
:
-
**降低资源消耗**
。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
-
**提高响应速度**
。当任务到达时,任务可以不需要
的
等到线程创建就能立即执行。
-
**提高响应速度**
。当任务到达时,任务可以不需要等到线程创建就能立即执行。
-
**提高线程的可管理性**
。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
### 4.2. 实现 Runnable 接口和 Callable 接口的区别
...
...
@@ -601,7 +601,7 @@ public ThreadPoolExecutor(int corePoolSize,
**`ThreadPoolExecutor` 3 个最重要的参数:**
-
**`corePoolSize` :**
核心线程数
线程数
定义了最小可以同时运行的线程数量。
-
**`corePoolSize` :**
核心线程数定义了最小可以同时运行的线程数量。
-
**`maximumPoolSize` :**
当队列中存放的任务达到队列容量的时候,当前可以同时运行的线程数量变为最大线程数。
-
**`workQueue`:**
当新任务来的时候会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中。
...
...
@@ -803,7 +803,7 @@ public void execute(Runnable command) {
![
图解线程池实现原理
](
images/java线程池学习总结/图解线程池实现原理.png
)
现在,让我们在回到 4.6 节我们写的 Demo, 现在
应该
是不是很容易就可以搞懂它的原理了呢?
现在,让我们在回到 4.6 节我们写的 Demo, 现在是不是很容易就可以搞懂它的原理了呢?
没搞懂的话,也没关系,可以看看我的分析:
...
...
@@ -933,7 +933,7 @@ AQS 原理这部分参考了部分博客,在 5.2 节末尾放了链接。
**AQS 核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制 AQS 是用 CLH 队列锁实现的,即将暂时获取不到锁的线程加入到队列中。**
> CLH(Craig,Landin
,
and Hagersten)队列是一个虚拟的双向队列(虚拟的双向队列即不存在队列实例,仅存在结点之间的关联关系)。AQS 是将每条请求共享资源的线程封装成一个 CLH 锁队列的一个结点(Node)来实现锁的分配。
> CLH(Craig,Landin
and Hagersten)队列是一个虚拟的双向队列(虚拟的双向队列即不存在队列实例,仅存在结点之间的关联关系)。AQS 是将每条请求共享资源的线程封装成一个 CLH 锁队列的一个结点(Node)来实现锁的分配。
看个 AQS(AbstractQueuedSynchronizer)原理图:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录