package com.xiaoma.mythread;
/**
* 手写死锁
* 手写死锁 才能更好的理解死锁,从而避免死锁 ^_^
*/
public class DeadLock {
/**
* 运行之后会发现程序锁住啦,没有报错,也没有异常,这种错误是很难发现的
* synchronized 在开发中最好不要嵌套使用
* 一不小心就可能导致死锁的发生
*/
public static void main(String[] args) {
Object o1 = new Object();
Object o2 = new Object();
Thread t1 = new Thread01(o1,o2);
Thread t2 = new Thread02(o1,o2);
t1.start();
t2.start();
}
}
class Thread01 extends Thread {
Object o1;
Object o2;
public Thread01(Object o1, Object o2) {
this.o1 = o1;
this.o2 = o2;
}
@Override
public void run() {
synchronized (o1) {
try {
//睡一秒,保证t1锁o2之前 t2已经把o2锁了
//这个时候去锁o2是锁不上的,因为t2已经锁了o2
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o2) {
}
}
}
}
class Thread02 extends Thread {
Object o1;
Object o2;
public Thread02(Object o1, Object o2) {
this.o1 = o1;
this.o2 = o2;
}
@Override
public void run() {
synchronized (o2) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o1) {
}
}
}
}
java 手写死锁
最新推荐文章于 2023-03-22 14:39:02 发布