代碼示例1:的Java多線程混亂
class Test {
MyObj myObj = new MyObj();
public void test() {
// doing my other stuff
synchronized (myObj) {
// accessing myObj
}
}
}
代碼示例2:
class Test {
MyObj myObj = new MyObj();
public void test() {
synchronized (myObj) {
// doing my other stuff
// accessing myObj
}
}
}
代碼示例3:
class Test {
MyObj myObj = new MyObj();
public synchronized void test() {
// doing my other stuff
// accessing myObj
}
}
我想保持線程在上面的代碼快照中可安全到myObj。那麼上面哪個代碼捕捉更可取,爲什麼?
代碼示例1是優選的。 代碼示例1 - >監視器在myObj上獲得,因此它是線程安全的 代碼示例2 - >監視器在myObj上獲得,因此它是線程安全的,其他內部或外部的東西無關 代碼示例3 - >鎖定/監視器是在調用test()方法的對象上獲得的,無論是myObj還是其他,都取決於調用 – user1933888
這些都不是最好的選擇,因爲你使'myObj'包被保護而不是private = P – Ordous