java中关于多线程死锁问题

class Test implements Runnable {
private boolean flag;

Test(boolean flag) {
    this.flag = flag;
}



public void run() {
    if (flag) {
        synchronized (Lock.locka) {
            System.out.println("if locka");
            synchronized (Lock.lockb) {
                System.out.println("if lockb");
            }
        }

    } else {
        synchronized (Lock.lockb) {
            System.out.println("else lockb");
            synchronized (Lock.locka) {
                System.out.println("else locka");
            }
        }
    }
}

}
class Lock
{
static Object locka = new Object();
static Object lockb = new Object();
}

public class Demo {

public static void main(String[] args) {
    Thread t1 = new Thread(new Test(true));
    Thread t2 = new Thread(new Test(false));
    t1.start();
    t2.start();
}

}
这种情况会出现死锁!
当时为什么我把
class Lock
{
static Object locka = new Object();
static Object lockb = new Object();
}
Object类放到Test类里面创建就没有出现死锁现象。测试n多遍。
求大神告知

2个回答

在外面的时候两个线程访问的是一个锁a,b。这样刚好互锁了。
而放到内部,两个线程都是各自的素女a,b。就不会出现死锁

放到里面,每次都是一个新对象

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问