1.为什么我的A类中的Object o1 和o2必须要static才能出现死锁呢?
package DeathBlock;
public class DeathBlock {
public static void main(String[] args) {
A a = new A(true);
A b=new A(false);
a.start();
b.start();
}
}
class A extends Thread{
boolean l;
static Object o1=new Object();//为什么必须是静态的?
static Object o2=new Object();
public A(boolean l) {
this.l = l;
}
@Override
public void run() {
if(l){
synchronized(o1){
System.out.println(Thread.currentThread().getName()+"进去1");
synchronized(o2){
System.out.println(Thread.currentThread().getName()+"进入2");
}
}
}else{
synchronized(o2){
System.out.println(Thread.currentThread().getName()+"进入2");
synchronized(o1){
System.out.println(Thread.currentThread().getName()+"进入1");
}
}
}
}
}
2.如果我没有创建对象b的话,根据一个对象只能有一把琐,当出了代码块之后,锁就会释放,接着拿下一把锁
但是为什么我的对象a,在进入
的时候,还没有出来代码块,没有释放锁,怎么就拿到了o2的锁呢?
运行结果