JVisualVM 的使用教程

4、我用的 IDEA 启动了一个程序

5、JVisualVM 的详细信息会出现在详细面板上

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6、可以看具体的线程快照信息

在这里插入图片描述

在这里插入图片描述

右键,保存线程快照信息。

收集线程快照信息主要是为了监控是否有出现死锁的情况:

刚好我这里有个例子:

package com.concurrent.deadLock;

/**

  • @author riemann

  • @date 2019/08/14 22:44

*/

public class ThreadTest {

public static void main(String[] args) {

new Thread(new Thread1()).start();

new Thread(new Thread2()).start();

// new Thread(new Thread3()).start();

}

}

class ThreadResource {

public static Object resource1 = new Object();

public static Object resource2 = new Object();

}

class Thread1 implements Runnable {

@Override

public void run() {

try {

System.out.println(“Thread1 is running”);

synchronized (ThreadResource.resource1) {

System.out.println(“Thread1 lock resource1”);

Thread.sleep(2000);//休眠2s等待线程2锁定资源2

synchronized (ThreadResource.resource2) {

System.out.println(“Thread1 lock resource2”);

}

System.out.println(“Thread1 release resource2”);

}

System.out.println(“Thread1 release resource1”);

} catch (Exception e) {

System.out.println(e.getMessage());

}

System.out.println(“Thread1 is stop”);

}

}

class Thread2 implements Runnable {

@Override

public void run() {

try {

System.out.println(“Thread2 is running”);

synchronized (ThreadResource.resource2) {

System.out.println(“Thread2 lock resource2”);

Thread.sleep(2000);//休眠2s等待线程1锁定资源1

synchronized (ThreadResource.resource1) {

System.out.println(“Thread2 lock resource1”);

}

System.out.println(“Thread2 release resource1”);

}

System.out.println(“Thread2 release resource2”);

} catch (Exception e) {

System.out.println(e.getMessage());

}

System.out.println(“Thread2 is stop”);

}

}

class Thread3 implements Runnable {

@Override

public void run() {

try {

System.out.println(“Thread is running”);

if (ThreadResource.resource1.hashCode() > ThreadResource.resource2.hashCode()) {

//先锁定resource1

synchronized (ThreadResource.resource1) {

System.out.println(“Thread lock resource1”);

Thread.sleep(2000);

synchronized (ThreadResource.resource2)

{

System.out.println(“Thread lock resource2”);

}

System.out.println(“Thread release resource2”);

}

System.out.println(“Thread release resource1”);

} else {

//先锁定resource2

synchronized (ThreadResource.resource2)

{

System.out.println(“Thread lock resource2”);

Thread.sleep(2000);

synchronized (ThreadResource.resource1)

{

System.out.println(“Thread lock resource1”);

最后

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

image

image

其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣,

没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

[外链图片转存中…(img-907dnxtP-1714408363244)]

[外链图片转存中…(img-XRVjV7u9-1714408363245)]

其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣,

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值