【发布时间】:2015-05-14 11:31:00
【问题描述】:
代码示例 1:
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 --> Lock/在调用 test() 方法的对象上获取监视器,无论是 myObj 还是其他任何对象,都取决于调用
-
这些都不是可取的,因为您将
myObj包保护而不是私有 =P
标签: java multithreading synchronize