5 回答

TA貢獻1802條經(jīng)驗 獲得超5個贊
我的理解是 Java 中每個對象都有一把鎖,synchronized (this) 鎖的是對象本身,synchronized (object) 鎖的是一個作為鎖的 Object。
以下代碼中的兩個 synchronized 塊之間不構(gòu)成同步,因為兩個塊的鎖加在了不同對象上
class SyncSample {
Object lock = new Object();
synchronized void m1() {
System.out.println("m1");
}
void m2() {
synchronized (lock) {
System.out.println("m2");
}
}
}

TA貢獻1772條經(jīng)驗 獲得超6個贊

TA貢獻1820條經(jīng)驗 獲得超10個贊
public synchronized void f()
相當(dāng)于synchronized (this)
也就是對象本身,synchronized(syncObject)
加鎖的是另外一個對象syncObject。
這樣的結(jié)果就是:你new出來一個DualSynch
對象,在兩個線程中f()
方法和g()
方法是可以并發(fā)執(zhí)行的,但是在兩個線程中f()
和f()
不能并發(fā)執(zhí)行,g()
和g()
不能并發(fā)執(zhí)行。
添加回答
舉報