This commit is contained in:
by931
2022-09-06 22:30:37 +08:00
parent 66970f3e38
commit 3d6528675a
796 changed files with 3382 additions and 3382 deletions

View File

@@ -323,7 +323,7 @@ java.lang.InterruptedException
<p>在 Java 线程启动时会创建底层线程native Thread在任务执行完成后会自动回收。</p>
<p>JVM 中所有线程都交给操作系统来负责调度,以将线程分配到可用的 CPU 上执行。</p>
<p>根据对 Hotspot 线程模型的理解,我们制作了下面这下示意图:</p>
<p><img src="assets/56b17020-69f3-11ea-a850-c1530f386d4a" alt="62445939.png" /></p>
<p><img src="assets/56b17020-69f3-11ea-a850-c1530f386d4a" alt="png" /></p>
<p>从图中可以看到,调用 Thread 对象的 start() 方法后JVM 会在内部执行一系列的操作。</p>
<p>因为 Hotspot JVM 是使用 C++ 语言编写的,所以在 JVM 层面会有很多和线程相关的 C++ 对象。</p>
<ul>
@@ -635,9 +635,9 @@ Found 1 deadlock.
<p>可以看到,这些工具会自动发现死锁,并将相关线程的调用栈打印出来。</p>
<h4><strong>使用可视化工具发现死锁</strong></h4>
<p>当然我们也可以使用前面介绍过的可视化工具 jconsole示例如下</p>
<p><img src="assets/1f1fc390-69f9-11ea-b22a-75d53668be52" alt="79277126.png" /></p>
<p><img src="assets/1f1fc390-69f9-11ea-b22a-75d53668be52" alt="png" /></p>
<p>也可以使用 JVisualVM</p>
<p><img src="assets/26b68350-69f9-11ea-b31d-2b61fbcda176" alt="79394987.png" /></p>
<p><img src="assets/26b68350-69f9-11ea-b31d-2b61fbcda176" alt="png" /></p>
<p>各种工具导出的线程转储内容都差不多,参考前面的内容。</p>
<p>有没有自动分析线程的工具呢请参考后面的章节《fastthread 相关的工具介绍》。</p>
<h3>参考资料</h3>