文章预览
前言
什么是死锁?
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
死锁示例
package com.juc;
import org.omg.CORBA.TIMEOUT;
import java.util.concurrent.TimeUnit;
/**
* @author niuben
*/
public class DeadLock {
//创建两个对象
static Object a = new Object();
static Object b = new Object();
public static void main(String[] args) {
new Thread(() -> {
synchronized (a){
System.out.println(Thread.currentThread().getName()+"持有锁a,尝试获取锁b");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (b) {
System.out.println(Thread.currentThread().getName()+"获取锁b");
}
}
},"A").start();
new Thread(() -> {
synchronized (b){
System.out.println(Thread.currentThread().getName()+"持有锁b,尝试获取锁a");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (a) {
System.out.println(Thread.currentThread().getName()+"获取锁a");
}
}
},"B").start();
}
}
验证死锁
jps -l
jstack 进程号
我这里是8168
发现死锁