싱글 (자세한 검사 듀얼 학교, 휘발성)

//final类不可继承
final public class Single {
    //使用volatile修饰变量
    private static  Single single = null;
    public static Single create() {
        //第一次验校
        if (single == null) {
            //同步代码块(类锁)
            synchronized (Single.class) {
                //第一次验校
                if (single == null) {
                    single = new Single();
                }
            }
        }

        return single;
    }

    /**
     * 私有构造函数,外部访问不了
     */
    private Single() {
    }
}
  1. 왜 첫 번째 문장 비우해야
    우리가 바로 뒤에 다시 하나의 개체를 반환 액세스 할 때,에 갈 것이다 동기 코드의 첫 번째 실행 create () 메소드 싱글 톤 패턴을 알고. 우리가 처음으로 학교가 발생하지 않는 경우, 각 스레드 동기화 코드에 가야하고, 각 시간은 스레드 동기화 잠금을 수행 할 수로 이동합니다. 여러 스레드의 경우 각 스레드 동기화 잠금이 해제에 대한 하나의 객체가 선 대기에 서 얻을 수 있습니다. 첫 번째 테스트 그래서 학교의 역할은 프로그램의 효율성을 개선하는 것입니다.

  2. 왜 두 번째 문장은 비어 있어야
    예를 들어 두 번째 학교 경험이없는 경우,이 학교에 첫 번째 테스트 실행 스레드, 그것은 하나의 == null로 판단된다. 자원이 스레드 B, B 프로그램의 실행을 선점하는이 시점에서, 코드의 동기화 블록이 객체를 생성 입력 한 다음 동기화 잠금을 해제, A는 동기화 잠금을 얻을 수있는 자원을 가지고있다 스레드하고 있기 때문에 스레드 전에 블록을 동기화 실시합니다 단일 == NULL을, 직접적 새로운 객체를 생성하는 결정. 그래서 우리의 디자인의 궁극적 인 목표의 위반이다.

  3. 왜 변수하면 휘발성 키워드를 추가하는
    휘발성 원리를 이해하는 독자를 초대합니다.

게시 70 개 원래 기사 · 원 찬양 4 · 조회수 6336

추천

출처blog.csdn.net/qq_44837912/article/details/104818270