【发布时间】:2014-10-04 17:56:51
【问题描述】:
以下是 Oracle Java 教程中的一小段文字:
“同步语句
创建同步代码的另一种方法是使用同步语句。与同步方法不同,同步语句必须指定提供内在锁的对象:
public void addName(String name) {
synchronized(this) {
lastName = name;
nameCount++;
}
nameList.add(name);
}
在本例中,addName 方法需要同步对lastName 和nameCount 的更改,但还需要避免同步调用其他对象的方法。 (从同步代码中调用其他对象的方法可能会产生问题,这在 Liveness 部分中进行了描述。)如果没有同步语句,就必须有一个单独的、非同步的方法来调用 nameList.add。
我理解他们关于 Synchronized 提供的灵活性的观点。但是为什么 Oracle 决定 nameList.add 不需要同步呢?更一般地说,我如何确定哪些对象方法需要同步,哪些不需要?
【问题讨论】:
标签: java multithreading