Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Coudy Hou
JavaGuide
提交
e84503a4
J
JavaGuide
项目概览
Coudy Hou
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e84503a4
编写于
7月 13, 2019
作者:
Y
yellowgg
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复markdown错误:并发篇
上级
5140c6e3
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
4 addition
and
4 deletion
+4
-4
docs/java/Multithread/AQS.md
docs/java/Multithread/AQS.md
+1
-1
docs/java/Multithread/JavaConcurrencyBasicsCommonInterviewQuestionsSummary.md
...d/JavaConcurrencyBasicsCommonInterviewQuestionsSummary.md
+3
-3
未找到文件。
docs/java/Multithread/AQS.md
浏览文件 @
e84503a4
...
...
@@ -124,7 +124,7 @@ tryReleaseShared(int)//共享方式。尝试释放资源,成功则返回true
### 3 Semaphore(信号量)-允许多个线程同时访问
**synchronized 和 ReentrantLock 都是一次只允许一个线程访问某个资源,Semaphore(信号量)可以指定多个线程同时访问某个资源。**
示例代码如下:
**synchronized 和 ReentrantLock 都是一次只允许一个线程访问某个资源,Semaphore(信号量)可以指定多个线程同时访问某个资源。**
示例代码如下:
```
java
/**
...
...
docs/java/Multithread/JavaConcurrencyBasicsCommonInterviewQuestionsSummary.md
浏览文件 @
e84503a4
...
...
@@ -104,8 +104,8 @@ public class MultiThread {
### 2.3. 虚拟机栈和本地方法栈为什么是私有的?
-
**虚拟机栈:**
每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。
-
**本地方法栈:**
和虚拟机栈所发挥的作用非常相似,区别是:
**虚拟机栈为虚拟机执行 Java 方法 (也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。**
在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。
-
**虚拟机栈:**
每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。
-
**本地方法栈:**
和虚拟机栈所发挥的作用非常相似,区别是:
**虚拟机栈为虚拟机执行 Java 方法 (也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。**
在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。
所以,为了
**保证线程中的局部变量不被别的线程访问到**
,虚拟机栈和本地方法栈是线程私有的。
...
...
@@ -152,7 +152,7 @@ Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种
![
RUNNABLE-VS-RUNNING
](
https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3/RUNNABLE-VS-RUNNING.png
)
当线程执行
`wait()`
方法之后,线程进入
**WAITING(等待)**
状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而
**TIME_WAITING(超时等待)**
状态相当于在等待状态的基础上增加了超时限制,比如通过
`sleep(long millis)`
方法或
`wait(long millis)`
方法可以将 Java 线程置于 TIMED WAITING 状态。当超时时间到达后 Java 线程将会返回到 RUNNABLE 状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到
**BLOCKED(阻塞)**
状态。线程在执行 Runnable 的
` run() `
方法之后将会进入到
**TERMINATED(终止)**
状态。
当线程执行
`wait()`
方法之后,线程进入
**WAITING(等待)**
状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而
**TIME_WAITING(超时等待)**
状态相当于在等待状态的基础上增加了超时限制,比如通过
`sleep(long millis)`
方法或
`wait(long millis)`
方法可以将 Java 线程置于 TIMED WAITING 状态。当超时时间到达后 Java 线程将会返回到 RUNNABLE 状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到
**BLOCKED(阻塞)**
状态。线程在执行 Runnable 的
` run() `
方法之后将会进入到
**TERMINATED(终止)**
状态。
## 7. 什么是上下文切换?
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录