たとえば、(マルチスレッド環境で) 2 つのカウンターを持つクラスがあります。
public class MyClass {
private int counter1;
private int counter2;
public synchronized void increment1() {
counter1++;
}
public synchronized void increment2() {
counter2++;
}
}
相互に関係のない2 つのインクリメント操作があります。しかし、ロックには同じオブジェクトを使用します ( this
)。
クライアントがメソッドとメソッドを同時に呼び出すincrement1()
と、モニターが解放されるまで呼び出しがブロックされるのは本当ですか?increment2()
increment2
increment1()
this
それが本当なら、 (パフォーマンス上の理由から) 操作ごとに異なるモニター ロックを提供する必要があるということですか?