나는 다음의 효과가 어떻게 될지 궁금 :synchronized 절에서 동기화 개체를 다시 할당 하시겠습니까?
Object mutex;
... // mutex initialized in constructor etc.
public setMutex(Object mutex) {
synchronized(this.mutex) {
this.mutex = mutex;
}
}
내가 본 비슷한 질문 자바를 위해 특별히 아무것도 다른 언어로 이런 종류의 일을하지하지만에 대해 조언을 제기했다. 또한 겉으로보기에는 자기 방어적인 코드이기 때문에 왜 이런 일을하고 싶어하는지에 대해 많은 질문을 보았습니다.
내 근거는 setMutex()가 호출 될 때 내 코드의 다른 중요한 섹션이 뮤텍스를 사용하고 있으며, 중요한 섹션이 종료 될 때까지 뮤텍스를 다시 할당하지 않기를 바란다. 그래서 뮤텍스가 무언가를 보호하고 있는지를 유지하면서 뮤텍스 설정에 대한 경쟁 조건을 지키지 않는 것입니다. 나는 그것이 의미가되기를 바란다 :
개인적으로 나는 그것이 잘 작동해야한다고 생각하지만, 나는 정말로 모른다.
EDIT : 입력하는 동안 메소드 서명 ... musta brainfartet에서 "synchronized"키워드를 제거했습니다.
좋은 IDE (넷빈즈)도 "비 최종 필드를 동기화"경고를보고하는 것를 참조하십시오. –
경고 (intellij)가 표시되었지만 때때로 동기화 객체를 재 할당해야하는 경우가 있습니다. 하지만 예 - 보통 - 실수. – Nick
객체가 아닌 메소드에'synchronized'를 사용하십시오. –