package com.jd.schdule;
/**
* 死锁
* @author yfzhangbin
*/
public class DeadlockTest {
public static Object lock1 = new Object();
public static Object lock2 = new Object();
public static void deadlock() {
new Thread(new Runnable() { // 线程T1
public void run() {
synchronized(lock1) {
System.out.println(1);
try {
Thread.sleep(1000);
} catch(Exception e) {
e.printStackTrace();
}
synchronized(lock2) { // 线程T1持有锁lock1,并等待线程T2释放锁lock2
System.out.println(2);
}
}
}
}).start();
new Thread(new Runnable() { // 线程T2
public void run() {
synchronized (lock2) {
System.out.println(3);
synchronized (lock1) { // 线程T2持有锁lock2,等待线程T1释放锁lock1
System.out.println(4);
}
}
}
}).start();
}
public static void main(String[] a){
deadlock();
}
}
输出:
1
3
进入死锁状态,进入无限等待中。
本文深入解析了Java程序中死锁的概念、原因,并通过具体代码实例展示了死锁的发生过程及其解决策略。重点阐述了如何通过合理设计线程同步机制避免死锁,确保程序稳定运行。

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



