1.是什么?
死锁是指两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力的干涉那它们将无法推进下去。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性很低,否则就会因争夺有限的资源而陷入死锁
死锁产生的主要原因:
1)系统资源不足
2)进程运行推进的顺序不合适
3)资源分配不当
代码实现:
package com.spdb.web.MvnWeb.juc;
import java.util.concurrent.TimeUnit;
class DeadData implements Runnable{
private String lockA;
private String lockB;
public DeadData(String lockA, String lockB) {
super();
this.lockA = lockA;
this.lockB = lockB;
}
@Override
public void run() {
synchronized (lockA) {
System.out.println(Thread.currentThread().getName() + "\t 获取资源 :" + lockA +" 等待获取 " + lockB);
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB) {
System.out.println(Thread.currentThread().getName() + "\t 获取资源 :" + lockB +" 等待获取 " + lockA);
}
}
}
}
public class MyDeadLock {
public static void main(String[] args) {
new Thread(new DeadData("lockA","lockB"),"AAA").start();;
new Thread(new DeadData("lockB","lockA"),"BBB").start();;
}
}
jps命令定位进程号
jstack 找到死锁查看