定义
死锁是指两个或两个以上的进程在执行的过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉,它们都无法推进下去。
产生的原因
- 系统资源不足
- 进程运行推进的顺序不合适
- 资源分配不当
代码实例
/**
* 死锁是指两个或两个以上的进程在执行的过程中,
* 因争夺资源而造成的一种互相等待的现象,
* 若无外力干涉,它们都无法推进下去
*/
public class DeadLockDemo implements Runnable{
private String lockA;
private String lockB;
public DeadLockDemo(String lockA, String lockB) {
this.lockA = lockA;
this.lockB = lockB;
}
@Override
public void run() {
synchronized (lockA){
System.out.println(Thread.currentThread().getName()+"\t自己持有:"+lockA+"\t尝试获得:"+lockB);
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB){
System.out.println(Thread.currentThread().getName()+"\t自己持有:"+lockB+"\t尝试获得:"+lockA);
}
}
}
public static void main(String[] args) {
String lockA = "lockA";
String lockB = "lockB";
new Thread(new DeadLockDemo(lockA, lockB), "AAA").start();
new Thread(new DeadLockDemo(lockB, lockA), "BBB").start();
}
}
解决
- jps 查出进程号
- jstack PID查看java异常堆栈信息