package com.ithei;
public class Demo03 {
//定义多个线程共享的锁
public static Object LOK01=new Object();
public static Object LOK02= new Object();
public static void main(String[] args) {
Demo03thread thread01=new Demo03thread(true);
Demo03thread thread02=new Demo03thread(false);
thread01.start();
thread02.start();
}
package com.ithei;
public class Demo03thread extends Thread {
boolean flag;
public Demo03thread(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
if(flag){
synchronized(Demo03.LOK01){
System.out.println("if(true)中的锁1");
try {
this.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
//
synchronized(Demo03.LOK02){
System.out.println("if(true)中的锁2");
}
}
}else{
synchronized (Demo03.LOK02) {
System.out.println("else(false)中的锁2");
synchronized(Demo03.LOK01){
System.out.println("else(false)中的锁1");
}
}
}
}
}
}
一开始我把if(flag)里的flag写成了true 然后打印结果是
if(true)中的锁1
if(true)中的锁2
if(true)中的锁1
if(true)中的锁2
这明显不是死锁 当我把true写成flag时就没有问题啦
if(true)中的锁1
else(false)中的锁2
为什么?有什么区别吗?
|
|