个人理解:
死锁本质就是线程在等待获得它永远无法等到的锁,然后傻傻的一直等,使得该线程无法执行后面的任务.
形成条件:
如何才能获得构造出这种情况呢,最简单的模型就是两个线程和两个锁,每个线程运行一段时间后获得自己的锁,再运行一段时间后,在释放自己的锁前,又想要获得对方的锁.然后两线程就陷入了无尽的等待.
为什么会变成这样子呢?本来高高兴兴,本来双倍快乐,是道德的沦丧还是人性的扭曲?!!话不多说看一下代码吧
public class DeadLock {
static Object lock1 = new Object();
static Object lock2 = new Object();
public static void main(String[] args) throws Exception {
new Thread(()->{
try {
System.out.println("线程1开始执行");
fun1();
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(()->{
try {
System.out.println("线程2开始执行");
fun2();
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
static void fun1() throws InterruptedException {
synchronized (lock1){
System.out.println("执行方法1");
Thread.sleep(2000);
fun2();
}
}
private static void fun2() throws InterruptedException {
synchronized (lock2){
System.out.println("执行方法2");
fun1();
}
}
}
网友评论