1.死锁:死锁是指两个或者两个以上的进程在执行的过程中,因为争夺资源而造成的一种互相等待的现象,若无外力干涉,那他们将无法推进下去
2.死锁的代码
package con.carry.并发.死锁;
/**
* 死锁是指两个以上的线程
*/
public class DeadThreadDemo {
public static void main(String[] args) {
ShareData shareData = new ShareData();
String lockA = "LockA";
String lockB = "LockB";
new Thread(() -> {
shareData.say(lockA, lockB);
},"A").start();
new Thread(() -> {
shareData.say(lockB, lockA);
},"B").start();
}
}
class ShareData {
public void say(String lockA, String lockB) {
synchronized (lockA) {
System.out.println("lockA 上锁了,尝试获取lockB" + lockB);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB) {
System.out.println("lockB 上锁了,尝试获取lockA" + lockA);
}
}
}
}
这个代码的运行结果如下:
3.线上如何检查死锁
1.利用jps查看哪个类有问题
2.利用jstack 进程id查看