这似乎是一个非常常见的问题,虽然我没有找到。假设我有这段代码:
public class MyClass {
private AnotherClass mField;
public void changeOne(AnotherClass newOne) {
// <...> lines of code here
synchronized (mField) {
mField = newOne;
}
// <...> lines of code here
}
public void changeTwo(AnotherClass newTwo) {
// <...> lines of code here
mField = newTwo;
// <...> lines of code here
}
}
假设changeOne()
andchangeTwo()
被不同的线程调用。有一个同步块changeOne()
来防止mField
改变就足够了changeTwo()
吗?mField
或者我需要明确地将每个更改的地方包装到synchronized
块中?(请留下同步方法和其他方法)。