これはよくある質問のようですが、見つけられませんでした。次のコードがあるとします。
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()
とchangeTwo()
が異なるスレッドから呼び出されたとしましょう。による変更changeOne()
から保護するには、同期ブロックを入れるだけで十分ですか? または、ブロックに変更された各場所を明示的にラップする必要がありますか? (同期メソッドなどは残しておいてください)。mField
changeTwo()
mField
synchronized