2013-12-17 4 views
2

Java에서 동기화되지 않은 메서드가 동기화 된 메서드에서만 호출되고 해당 스레드가 비동기 메서드를 실행하는 동안 synchronized 메서드가 다른 스레드에서 호출됩니다. 이 두 번째 스레드가 비동기 메소드를 호출 할 수 있습니까? 내 지식에 따르면, 두 번째 스레드는 sync 메소드를 호출 할 수 없어야합니다. 그 메소드가 아직 반환되지 않았기 때문입니다. 그러나 나는 아직도 나의 혼란을 없애기 위해이 질문을하고있다.동기화 메서드에서 비동기 메서드 호출

감사

+0

synchronized 메서드에 대한 첫 번째 호출과 동일한 인스턴스에서 synchronized 메서드에 대한 두 번째 호출이 있습니까? – rgettman

+0

예, 클래스의 동일한 인스턴스에 적용됩니다. 기본적으로 클래스 내부에서 동기화 및 비동기 메서드를 호출하고 있습니다. – Naruto

답변

2

이 두 번째 스레드는 비 동기화 메소드를 호출 할 수 있습니까?

아니요. 실제로 두 번째 스레드는 첫 번째 스레드가 완료 될 때까지 메소드의 동기화 된 섹션에 들어갈 수 없습니다.

물론 두 번째 스레드가 비동기 메서드를 직접 호출 할 수는 있지만 결코 발생하지 않는다고 언급 했으므로 아무런 문제가 없습니다.

인스턴스 메서드의 경우 synchronized 메서드 호출이 동일한 인스턴스에서 발생한다는 것은 말할 필요도 없습니다.

+0

비 동기화 메서드가 직접 호출되지는 않지만 동기화 메서드 내부에서 호출되었음을 언급했습니다. – Naruto

+0

@Naruto 예, 응답 내에 해당 부분을 인정했습니다. – dasblinkenlight

관련 문제