/**
* @version 1.0
* function:
* @author:阿卜杜赛麦提
* @date:2023/1/10 15:18
*/
class Main{
public static void main(String[] args) {
DeadLock deadLockT = new DeadLock(true);
DeadLock deadLockF = new DeadLock(false);
Thread thread = new Thread(deadLockT);
Thread thread1 = new Thread(deadLockF);
thread.setName("A线程");
thread1.setName("B线程");
thread .start();
thread1.start();
}
}
public class DeadLock implements Runnable{
static Object o1=new Object(); //这里用static保证多线程共享一个对象
static Object o2=new Object();
// static String o1=new String();
// static String o2=new String();
boolean flag;
public DeadLock(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
//当A线程拿到o1这对象锁以后试图要拿o2对象锁此时o2对象锁已经被B线程抢到了所以A线程卡在这里,B线程也是同样的道理
if (flag){
synchronized (o1){
System.out.println("进入了111");
synchronized (o2){
System.out.println("进入了2222");
}
}
}else {
synchronized (o2){
System.out.println("进入了33333");
synchronized (o1){
System.out.println("进入了444444");
}
}
}
}
}
java模拟线程死锁的经典案例
最新推荐文章于 2023-07-28 20:00:41 发布