Java 동기화와 관련하여 의문의 여지가 있습니다. 내 클래스에 3 개의 동기화 된 메서드가 있고 스레드가 하나의 동기화 된 메서드에서 잠금을 획득하는지 알고 싶습니다. 다른 두 메서드는 잠겨 있습니까? 나는 다음 질문에 혼란스러워서이 질문을하고있다.Java에서 동기화가 어떻게 작동합니까?
스레드가 개체의 동기화 된 메서드 내에있는 동안이 동기화 된 메서드 또는 개체의 다른 동기화 된 메서드를 실행하려는 다른 모든 스레드가 대기해야합니다. 이 제한은 이미 잠금이 있고 스레드의 동기화 된 메소드를 실행중인 스레드에는 적용되지 않습니다. 이러한 메서드는 차단되지 않고 개체의 다른 동기화 된 메서드를 호출 할 수 있습니다. 객체의 비동기 메소드는 물론 모든 스레드가 언제든지 호출 할 수 있습니다.
그 진술의 근원은 무엇이며 혼동은 무엇입니까? 당신은 그것을 이해하는 것 같습니다. 동기화 된 하나의 메소드를 다른 메소드에서 액세스 할 때 교착 상태에주의하십시오. – Sridhar
Re : "다른 두 개가 잠길 것입니다." 이미 잠금을 가지고있는 현재 실행중인 스레드는 동일한 객체에서 다른 동기화 된 메소드를 호출 할 수 없지만 다른 스레드는 모두 차단됩니다 (즉, 잠금이 주어질 때까지 기다려야합니다). 맥스는 객체 자체 (즉, this) 또는 다른 객체 변수를 완전히 잠그고 있는지에 대한 좋은 대답을 가지고 있습니다. – Brad