产生死锁的条件:
1.有至少一个资源不能共享
2.至少有一个任务必须持有一个资源并且等待获取另一个被别的任务持有的资源
3.资源不能任务抢占
4.必须有循环等待
只要打破其中一个条件就不会产生死锁,通常是打破第4个条件
Java死锁程序
public class DeadLock {
Object o1 = new Object();
Object o2 = new Object();
boolean flag = false;
class T1 extends Thread {
public void run() {
System.out.println("ent T1");
synchronized (o1) {
System.out.println("get o1");
try {
this.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o2) {
System.out.println("get o2");
}
}
System.out.println("ext T1");
}
}
class T2 extends Thread {
public void run() {
System.out.println("ent T2");
synchronized (o2) {
System.out.println("get o2");
try {
this.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (o1) {
System.out.println("get o1");
}
}
System.out.println("ext T2");
}
}
public static void main(String[] args) {
DeadLock mt = new DeadLock();
DeadLock.T1 t1 = mt.new T1();
DeadLock.T2 t2 = mt.new T2();
t1.start();
t2.start();
}
}
本文通过一个具体的Java程序示例详细解析了死锁产生的四个必要条件:不可共享资源的存在、占有并等待、不可抢占以及循环等待,并展示了如何通过代码触发死锁。

被折叠的 条评论
为什么被折叠?



