같은 클래스에 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"의 다른 필드 / 방법에는 영향을 미치지 않습니다.