Skip to content

Commit

Permalink
Update 1并发编程基础知识.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Snailclimb committed Apr 27, 2019
1 parent ecc9c0d commit cb69a9d
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions docs/java/Multithread/1并发编程基础知识.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,10 @@ public class MultiThread {
下图是 Java 内存区域,通过下图我们从 JVM 的角度来说一下线程和进程之间的关系。如果你对 Java 内存区域 (运行时数据区) 这部分知识不太了解的话可以阅读一下我的这篇文章:[《可能是把 Java 内存区域讲的最清楚的一篇文章》](https://github.com/Snailclimb/JavaGuide/blob/master/Java 相关/可能是把 Java 内存区域讲的最清楚的一篇文章.md)

<div align="center">
<img src="https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3Java 运行时数据区域 JDK1.8.png" width="600px"/>
<img src="https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3Java%E8%BF%90%E8%A1%8C%E6%97%B6%E6%95%B0%E6%8D%AE%E5%8C%BA%E5%9F%9FJDK1.8.png" width="600px"/>
</div>


从上图可以看出:一个进程中可以有多个线程,多个线程共享进程的******方法区 (JDK1.8 之后的元空间)**资源,但是每个线程有自己的**程序计数器****虚拟机栈****本地方法栈**

下面来思考这样一个问题:为什么**程序计数器****虚拟机栈****本地方法栈**是线程私有的呢?为什么堆和方法区是线程共享的呢?
Expand Down Expand Up @@ -278,7 +279,7 @@ Linux 相比与其他操作系统(包括其他类 Unix 系统)有很多的

如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。

![线程死锁示意图 ](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3 死锁 1.png)
![线程死锁示意图 ](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-4/2019-4死锁1.png)

下面通过一个例子来说明线程死锁,代码模拟了上图的死锁的情况 (代码来源于《并发编程之美》):

Expand Down

0 comments on commit cb69a9d

Please sign in to comment.