死锁以及死锁排除和分析
目录
一、死锁概念
两个或者更多的线程因竞争资源而造成相互等待的情况,叫做死锁。
二、死锁例子
package com.lemon.practice.demo;
public class DiedLockDemo {
private static String A = "A";
private static String B = "B";
public static void main(String[] args) {
DiedLockDemo.diedLockTest();
}
private static void diedLockTest() {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (A){
try {
Thread.currentThread().sleep(2000);//等待2000ms等线程T2锁定B
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (B){
System.out.println(1);
}
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (B) {
try {
Thread.currentThread().sleep(2000);//等待2000ms等线程T1锁定A
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (A){
System.out.println(2);
}
}
}
});
t1.start();
t2.start();
}
}
三、死锁排除及分析方法
3.1 jstack方法
1.在命令提示符CMD中输入jps -l,找到当前Java进程的进程号pid,通过包路径很容易区分出自己开发的程序进程。
2.使用jstack -l pid,查看当前进程的错误信息。
3.2 JConsole方法
1.使用win+R 打开运行对话框,输入JConsole
2.连接自己要选择的进程。
3.检测死锁。
后续再补充!