Skip to content

Commit cb69a9d

Browse files
committed
Update 1并发编程基础知识.md
1 parent ecc9c0d commit cb69a9d

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

docs/java/Multithread/1并发编程基础知识.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,10 @@ public class MultiThread {
6060
下图是 Java 内存区域,通过下图我们从 JVM 的角度来说一下线程和进程之间的关系。如果你对 Java 内存区域 (运行时数据区) 这部分知识不太了解的话可以阅读一下我的这篇文章:[《可能是把 Java 内存区域讲的最清楚的一篇文章》](https://github.com/Snailclimb/JavaGuide/blob/master/Java 相关/可能是把 Java 内存区域讲的最清楚的一篇文章.md)
6161

6262
<div align="center">
63-
<img src="https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3Java 运行时数据区域 JDK1.8.png" width="600px"/>
63+
<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"/>
6464
</div>
6565

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

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

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

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

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

0 commit comments

Comments
 (0)