产生死锁测试代码如下:
package test;
public class DeathLockTest {
private static final String A="a";
private static final String B="b";
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
testA();
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
testB();
}
});
t1.start();
t2.start();
}
public static void testA(){
synchronized (A) {
try {
Thread.sleep(1100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (B) {
System.out.println("aaa->bbb");
}
}
}
public static void testB(){
synchronized (B) {
synchronized (A) {
System.out.println("bbb->aaa");
}
}
}
}
两个方法testA和testB中是典型的锁对象顺序不当产生的死锁
我们在命令行下运行这个程序,将会死锁,程序停止响应。
这时我们按下ctrl+break,输出的信息中其中有这么一段:
Java stack information for the threads listed above:
===================================================
"Thread-1":
at test.DeathLockTest.testB(DeathLockTest.java:49)
- waiting to lock <0x37a4d840> (a java.lang.String) //等待<0x37a4d840>上的锁
- locked <0x37a4d858> (a java.lang.String) //已锁定<0x37a4d858>
at test.DeathLockTest$2.run(DeathLockTest.java:25)
at java.lang.Thread.run(Unknown Source)
"Thread-0":
at test.DeathLockTest.testA(DeathLockTest.java:41)
- waiting to lock <0x37a4d858> (a java.lang.String) //等待<0x37a4d858>上的锁
- locked <0x37a4d840> (a java.lang.String) //已锁定<0x37a4d840>
at test.DeathLockTest$1.run(DeathLockTest.java:12)
at java.lang.Thread.run(Unknown Source)
Found 1 deadlock.
可以很容易的看出两个线程互相等待对方锁定的对象,造成死锁
分享到:
相关推荐
Java 本身提供了多种丰富的工具来帮助开发人员查看和分析 GC 以及 JVM 内存的状况。 输出GC日志 输出 GC 日志对于跟踪分析 GC 的状况,无疑是最明显和直接的分析内存回收状况的方 法,只是 GC 日志输出后需要人肉的...
Java解决死锁问题eclipse代码版
jvm.dll应用程序,是开发PYCHARM常用的一个连接,所以能下载
JVM内存状况查看方法和分析工具,值得借鉴
java 查看JVM中所有的线程的活动状况 java 查看JVM中所有的线程的活动状况
jvm死锁jar包用于排查学习
JVM Thread Stack线程栈分析
jvm源码,jvm-native的源码,jvm支行机制,可对jvm的运行过程进行分析 个人网站:https://www.zhangjunbk.com
IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.找到需要分析的jvm进程 3.使用jstack [pid] > /tmp/sdapjvmlog.txt导出进程的详细日志 4.使用程序打开...
jvm gc jvm gc jvm调优 查看工具
idea使用jvm
本系列课程从JVM基础到高级实战,老师手把手教你如何进行JVM调优,思路清晰,没有废话,旨在挑战高薪。 课程亮点: 1、基于阿里arthas进行JVM调优; 2、基于代码排查OOM问题,拒绝空讲; 3、总结JVM通用的调优思路;...
JVM参数使用说明
JVM监控工具使用入门,对初学这帮助很大
JVM 监控程序 查看JVM的使用情况的软件,可以释放内存资源
介绍常用的JVM诊断和分析工具,并以死锁和OOM为例,展示这些工具的使用。 第八课 分析Java堆 MAT的使用案例 Jvisualvm介绍使用 介绍了Java堆的分析方法,以一个实例为基础,展示对堆的分析过程。 第九课 锁 ...
多年积累的基础算法等,使用java实现,包括:基础算法,大数据算法,JVM特性等示例程序集合,适合面试官选取面试题或者面试者准备面试阅读。.zip
jvm源码