2012-04-16 3 views
1

이것은 분명해 보이지만 나는이 권리를 확실히하고 싶습니다. null 참조에서 잠금을 얻으려고하면 올바르게 작동하지 않습니다. 그것은 참조가 아닌 객체의 속성을 사용하기 때문에?뮤텍스 잠금으로 객체 참조 사용

Object lock = null; 

synchronized(lock) 
{ 
} 

답변

4

내가 null 참조에 대한 잠금을 획득하려고하면이 올바른 작동하지 않습니다?

맞습니다. null을 사용하여 동기화하려고하면 NullPointerException가 표시됩니다.

개체의 속성을 참조가 사용하지 않으므로?

정확하게는 아닙니다. 잠금 상태는 질문 할 수있는 방법이 없기 때문에 일반적인 의미의 속성이 아닙니다. 그러나 그렇습니다, 국가는 대상의 일부입니다.

(하지만 그것에 대해 생각해보십시오. 어떻게 잠금 상태가 참조의 일부가 될 수 있습니까? 그렇다면 this에서 동기화하거나 개체 참조를 매개 변수로 전달하는 방법은 무엇입니까? 참조는 복사본으로 전달됩니다. ... 한 복사본에 대한 변경 사항은 다른 버전으로 전파 할 수 없으며 잠금 상태가 전파되지 않으면 참조 사본이있는 두 개의 스레드를 의미있는 방식으로 동기화 할 수 없습니다.

+0

잠금 상태는 일반적으로 객체의 헤더에 부분적으로 표시되지만 구현에 따라 다릅니다. JIT 컴파일러는 잠금을 잠 그거나 해제 할 때 필수 의미를 구현하는 원시 명령어를 방출합니다. 이들은 또한 구현에 의존한다. –

3

예. 동기화는 객체 자체에 있습니다.