谈女朋友的方式记住java的Thread死锁
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个美女呢?//哈哈,发现自己好坏!//哈哈?