public class MakeGirlfriend implements Runnable{
private int flag = 1; //flag = 1,代表:1号帅哥。flag = 2,代表:2好帅哥
static Object o1 = new Object(),o2 = new Object();
//这里的意思是o1代表:1号美女,o2代表:2号美女
@Override
public void run() { //导演准备的大房间,进行交谈交际测试的!
System.out.println("flag="+flag); //看2位帅哥角色有没有 进入房间这个房间
if(flag == 1){ //如果是1号帅哥就进来
synchronized(o1){ //如果1号帅哥先锁定1号美女的话,然后开始交往!
try {
Thread.sleep(500);//那么就必须等半分钟才可以去锁定2号美女
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(o2){ //如果1号帅哥把1号美女锁定后半分钟后,再来锁定2号美女那么
System.out.println("嘿嘿,1号美女跟2号美女都归我了,2个女朋友真爽啊!");
}
}
}
if(flag == 2){ //如果是2号帅哥就进来
synchronized(o2){ //如果2号帅哥先锁定2号美女的话,然后开始交往!
try {
Thread.sleep(500); //那么就必须等半分钟才可以去锁定1号美女
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(o1){ //如果2号帅哥把2号美女锁定后半分钟后,再来锁定1号美女那么
System.out.println("嘿嘿,1号美女跟2号美女都归我了,2个女朋友真爽啊!");
}
}
}
}
public static void main(String[] args) {//【演播大厅】导演说:我们需要dk01,dk02 这样的2个角色
MakeGirlfriend dk01 = new MakeGirlfriend(); //所以设计出了dk01角色
MakeGirlfriend dk02 = new MakeGirlfriend(); //所以设计出了dk02角色
//导演又说:需要2个演员来演这两个角色
//员工说:找到演员了,他们分别是(男1号)跟(男2号)
//导演说:让1号演dk01角色,让2号演dk02角色
dk01.flag = 1;
dk02.flag = 2;
new Thread(dk01).start(); //角色dk01准备开工
new Thread(dk02).start(); //角色dk02准备开工
}
}
//到底是1号帅哥得到了2个美女还是2号帅哥得到了2个美女呢?
//哈哈,发现自己好坏!
//哈哈
谈女朋友的方式记住java的Thread死锁
最新推荐文章于 2022-06-05 19:22:29 发布