同じクラスに2つの同期されたメソッドがあり、それぞれが異なる変数にアクセスしている場合、2つのスレッドがそれらの2つのメソッドに同時にアクセスできますか?ロックはオブジェクトで発生しますか、それとも同期メソッド内の変数と同じくらい具体的になりますか?
例:
class X {
private int a;
private int b;
public synchronized void addA(){
a++;
}
public synchronized void addB(){
b++;
}
}
2つのスレッドが実行クラスXの同じインスタンスにアクセスすることができますx.addA(
)とx.addB()
同じ時間に?
synchronized (this)
の本体の周りにブロックを置くことと機能的に同等です。オブジェクト「this」はロックされません。むしろ、オブジェクト「this」がミューテックスとして使用され、ボディは「this」で同期された他のコードセクションと同時に実行されるのを防ぎます。同期されていない「this」の他のフィールド/メソッドには影響しません。