문제

동기화 측면을보고있는 코드 스 니펫을 살펴 보았습니다. 나는 잠금이 물체에서 발생한다고 생각합니다. Java의 경우 우리는 객체에 대한 언급 만 있습니다. Java는 참조를 사용하여 객체를 조달하고 잠글 수 있어야합니다.

참조가 널이되면 어떻게됩니까? 나는 이것이 깨질 것이라고 생각한다. 이것이 작동한다면 참조에서도 잠금이 발생해야합니다 (나를 때리는). 누군가 나를 위해 이것을 명확히 할 수 있습니까?

    synchronized (formatters) {
        if(formatters == null) {
            prepareCache(feedId);
        }
    }
도움이 되었습니까?

해결책

에 따라 이 포럼에, 및 기타 많은 관련 링크. Formatters가 Null이면 NullPointerException이 발생합니다.

다른 팁

NullPointerException을 얻습니다. 예를 들어:

class A {
    public static void main(String[] ss) {
        Object o = null;
        synchronized (o) {
        }
    }
}

당신에게 :

Exception in thread "main" java.lang.NullPointerException
    at A.main(A.java:4)

에서 동기화 된 문 섹션의 섹션 자바 언어 사양:

"SynchronizedStatement: synchronized ( Expression ) Block"... 그렇지 않으면 표현식의 값이 null이면 NullPointerException이 발생합니다. "

sssh, 당신은 그것들이 실제로 있다는 것을 알지 못해요 참조 객체에! 구현 방식이 아니라 객체처럼 제시된대로 생각하십시오. 객체 클래스는 단일 잠금 장치를 제공하므로 Formatters 객체가 상속됩니다. Formatters가 Null이면 동기화하면 NullPointerException이 발생합니다.

가능한 경우 실제로 사용되는 객체에서 동기화하지 마십시오. 클래스 내에서 잠금을 수행하는 개인 최종 개체와 동기화하십시오. 그 이유는 다른 사람들이 동기화 할 동일한 객체를 선택할 수 있기 때문에이 잠금 장치가 어떤 부작용이 있는지 모릅니다.

작동하지 않습니다. 당신은 동기화합니다 사물, 켜져 있지 않습니다 변수. 변수가 null이면 동기화 할 객체가 없으므로 예외가 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top