多线程演示死锁——必然死锁的情况
package background;
/**
* @author leon
* @描述 第二种线程安全问题,演示死锁问题。
*/
public class MultiThreadError implements Runnable{
int flag = 1;
static Object o1 = new Object();
static Object o2 = new Object();
public static void main(String[] args) {
MultiThreadError multiThreadError1 = new MultiThreadError();
MultiThreadError multiThreadError2 = new MultiThreadError();
multiThreadError1.flag = 1;
multiThreadError2.flag = 0;
new Thread(multiThreadError1).start();
new Thread(multiThreadError2).start();
}
@Override
public void run() {
System.out.println("flag" + flag);
if (flag == 1) {
synchronized (o1) {
try {
Thread.sleep(500);
System.out.println("我是1");
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o2) {
System.out.println("1");
}
}
}
if (flag == 0) {
synchronized (o2) {
try {
Thread.sleep(500);
System.out.println("我是0");
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o1) {
System.out.println("0");
}
}
}
}
}
互不释放自己手中已有的资源,导致必然发生死锁。

最后的1 和 0 始终不会被打印出来。
浙公网安备 33010602011771号