package com.auth.test;
/**
* 死锁实例
* @author kang
* @version 1.0
* @date 2019/12/6 13:21
*/
public class DeadLock implements Runnable {
public int flag = 1;
//静态对象是类的所有对象共享的
private static Object o1 = new Object(), o2 = new Object();
@Override
public void run() {
System.out.println("flag:{}" + flag);
if(flag == 1){
//先锁o1,在对o2加锁,环路等待条件
synchronized (o1){
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
synchronized (o2){
System.out.println("1");
}
}
}
if(flag == 0){
//先锁o2,在锁o1
synchronized (o2){
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
synchronized (o1){
System.out.println("0");
}
}
}
}
public static void main(String[] args) {
DeadLock td1 = new DeadLock();
DeadLock td2 = new DeadLock();
td1.flag = 1;
td2.flag = 0;
//td1,td2都处于可执行状态,但JVM线程调度先执行哪个线程是不确定的。
//td2的run()可能在td1的run()之前运行
new Thread(td1).start();
new Thread(td2).start();
}
}
来源:CSDN
作者:烟火缠过客
链接:https://blog.csdn.net/LuckFairyLuckBaby/article/details/103489737