두 가지 방법이 있습니다.다른 동기화 된 메서드 내에서 동기화 된 메서드 참조
두 메서드는 synchronized 메서드입니다. 하나의 메서드를 다른 메서드에서 호출하면 교착 상태가 발생합니까?
두 가지 방법이 있습니다.다른 동기화 된 메서드 내에서 동기화 된 메서드 참조
두 메서드는 synchronized 메서드입니다. 하나의 메서드를 다른 메서드에서 호출하면 교착 상태가 발생합니까?
아니요, 두 가지 방법이 모두 동일한 클래스에 있고 (static
또는 둘 모두가 static
이 아님) 가정합니다. synchronized
메서드는 입력하려는 스레드가 모니터 객체를 보유 할 수있을 때만 입력됩니다 (예 : this
). 스레드가 이미 모니터를 획득 했으므로 더 이상 문제없이 두 번째 방법을 간단하게 입력 할 수 있습니다.
그건 재진입 잠금이라고. – toto2
이 A
에 대한 잠금을 획득하고 B
을 잠 그려는 경우. Thread 2
은 B
에 잠금 장치가 있고 A
에도 잠금을 설정하려고합니다. 이것은 교착 상태입니다. 그렇지 않으면 모든 것이 가능합니다.
그것은 따라 달라
그렇다면 교착 상태가 발생할 수 있습니다.
그러나 하나의 동일한 객체에서 동기화 된 메소드에 대해 이야기하는 경우 교착 상태가 발생하지 않습니다. 객체의 모니터는 재진입입니다. 이미 보유하고있는 경우 다시 모니터를 요청할 수 있습니다 (동일한 객체에 동기화 된 블록을 입력하십시오).
두 클래스가 동일한 클래스에 속해 있습니까? – unholysampler
잠금 개체에 따라 다릅니다. 인스턴스 메서드, 정적 메서드, 내부 동기화 된 블록이있는 메서드 등의 의미에 대한 자세한 내용을 제공 할 수 있습니까? – Thomas