이 질문은 Java Concurrency in Practice의 예에서 나왔습니다. 이 책의 2 장에서 우리는 이와 같은 예를 얻었고, 나는 그것을 완전히 복사하지는 않습니다. 다음 코드 블록을 가지고 있다고합시다.동기화 된 메서드 override- 스레드가 개체를 잠급니다.
class A{
synchronized void method1(){
do some stuff..
}
}
class B extends A{
synchronized void method1(){
super.method1();
}
}
이제 우리는 B 클래스의 객체를 만들고 다음을 수행합니다. public static void main.
B b=new B()
Thread t1=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
b.method1();
}
});
Thread t2=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
b.method1();
}
});
그리고 나서 t1 및 t2 스레드를 시작하십시오.
여기에 내 질문에 있습니다
내가 여기에 방법을 동기화 한 것처럼하는 스레드가 잠금 얻는다 반대? 나는 코드
super.method1()를 B 개체의 잠금을 획득 만 B 객체와 B의 "방법 항목"나는 스레드 생각할 수있는 위해를 작성하지만 실행 다음과 같은 상태입니다
그리고 제어 이후 최고에 도달 객체가 잠금을 획득하는 클래스의 method1?
- 이 동작이 Reentrancy에 어떻게 연결되어 있습니까?
실제로 컴파일하는 게시 코드는 어떻습니까? 쓰레드가'method1'을 호출하거나 실제로'B'의 인스턴스를 사용할 수있는 것을 보여주는 것은 없습니다. 이것은 차례로 귀하의 질문을 모호하게하여 귀하가 묻고 답할 수없는 것을 알 수 없도록합니다. –
사과, 수정. –
세미콜론을 제외하고. 게시 한 코드를 실제로 컴파일하고 실행합니까? –