在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 死鎖和靜態(tài)對象問題?

死鎖和靜態(tài)對象問題?

如題所示, o1和o2申明為靜態(tài)對象就可產生死鎖,那非靜態(tài)為什么不可以?
我所理解的靜態(tài)對象:在內存空間只存在一份;
如果申明非靜態(tài)是不是Lock lock1 = new Lock(1);Lock lock2 = new Lock(2);
lock1和lock2中都存在o1和o2?

public class Lock implements Runnable

private int flag;

public Lock(int flag) {
    this.flag = flag;
}

// **?**
static Object o1 = new Object();
static Object o2 = new Object();

public static void main(String[] args) {

    Lock lock1 = new Lock(1);
    Lock lock2 = new Lock(2);

    new Thread(lock1).start();
    new Thread(lock2).start();

}

public void run() {
    System.out.println("flag = " + flag);
    if (flag == 1) {
        synchronized (o1) {
            System.out.println("已持有O1 對象鎖.");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (o2) {
                System.out.println("持有O2 對象鎖");
            }
        }
    } else if (flag == 2) {
        synchronized (o2) {
            System.out.println("已持有O2 對象鎖.");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (o1) {
                System.out.println("持有O1 對象鎖");
            }
        }
    }
}

}

回答
編輯回答
笨笨噠

你最后說的是對的,如果非靜態(tài),lock1和lock2中都存在o1和o2,o1和o2分別有2份,是不同的對象。

靜態(tài)成員變量,簡單理解就是這個類所有對象都可以訪問的全局變量,類加載的時候就會把這個對象創(chuàng)建出來。

2018年6月10日 13:44
編輯回答
浪蕩不羈

靜態(tài) 鎖的是字節(jié)碼 只有一份
非靜態(tài) 鎖的對象的成員變量 每一個對象不同,成員變量也不同 所以有多份

所以你最后說的是沒問題的 非靜態(tài)中的 lock1 lock2中都有各自的o1 o2

2018年3月21日 09:20