자바 면접 흔 한 패턴 문제

6621 단어 단일 모드자바
1.소개
단일 모드 로 스토리 보드 장면:
  • 업무 시스템 은 전체 적 으로 12032 개의 대상 인 스 턴 스 만 필요 합 니 다.예 를 들 어 발신 기,redis 연결 대상 등 입 니 다.
  • Spring IOC용기 에 있 는 Bean 은 기본적으로 하나의 예 이다.
  • Spring Boot 의 Controller,Service,Dao 층 에서 통 과 된 @Autowire의존 주석 대상 은 기본적으로 단일 예 입 니 다.
  • 단일 모드 분류:
  • 게으름뱅이:이른바 게 으 름 로드,대상 생 성 지연,필요 할 때 대상 을 만 드 는 것 입 니 다.
  • 굶 주 린 사람:게으름뱅이 와 반대로 대상 을 미리 만 듭 니 다.
  • 단일 모델 실현 절차:
  • 사유 화 구조 함수.
  • 단일 사례 를 얻 는 방법 을 제공 합 니 다.
  • 2.단일 모델―게으름뱅이 식
    단일 모델―게으름뱅이 식 은 다음 과 같은 것 이 있다.
    
    /**
     * @Auther: csp1999
     * @Date: 2020/11/06/20:36
     * @Description:       -   
     */
    public class SingletonLazy {
        //                   
        private static SingletonLazy instance;
        /**
         *        
         *      new SingletonLazy()        
         * 
         *               
         *      SingletonLazy.getInstance()         
         */
        private SingletonLazy() {
        }
        /**
         *        
         */
        public void process() {
            System.out.println("       !");
        }
        /**
         *    :
         * <p>
         *                
         * <p>
         *   :     ,          
         *
         * @return
         */
        public static SingletonLazy getInstance() {
            if (instance == null) {//    null     
                /**
                 *       :
                 *      ,            instance == null     
                 *          if         
                 *          SingletonLazy  
                 */
                instance = new SingletonLazy();//               
            }
            return instance;
        }
        /**
         *    :
         *    synchronized        
         *
         *   synchronized              
         *    getInstance2()           ,       
         *               ,                      ,      ,     
         *
         * @return
         */
        public static synchronized SingletonLazy getInstance2() {
            if (instance == null) {//    null     
                //     synchronized          
                instance = new SingletonLazy();//               
            }
            return instance;
        }
        /**
         *    :
         *  getInstance3()   ,              ,          
         *
         *      :
         * @return
         */
        public static SingletonLazy getInstance3() {
            if (instance == null) {//    null     
                //              ,    
                //   :    A   B
                synchronized (SingletonLazy.class){
                    //    A          B   A  new SingletonLazy();   
                    //  A       ,B      ,             
                    instance = new SingletonLazy();//               
                }
            }
            return instance;
        }
    }
    단일 모드:게으름뱅이 실현+이중 검사 잠 금+메모리 모델
    상기 방식 에 존재 하 는 세 가지 결함 에 대해 우 리 는 이중 으로 잠 금 을 검사 하 는 방식 으로 이 를 개선 할 수 있다.
    
    /**
     *        :
     *  getInstance3()   ,              ,          
     *
     * DCL        (Double-Checked-Locking)             
     *
     *      ? instance = new SingletonLazy();         
     * jvm  instance           :
     * 1.       
     * 2.        
     * 3.      instance  
     *
     *              :
     *         :1 -> 3 -> 2,              
     *  ,         instance    ,           
     * (      )
     *
     * @return
     */
    public static SingletonLazy getInstance3plus() {
        if (instance == null) {//    null     
            //              ,    
            //     A   B 
            synchronized (SingletonLazy.class){//      
                //    A          B   A  new SingletonLazy();   
                //  A       ,B      ,      instance == null    
                //      ,B        SingletonLazy
                if (instance == null){//      
                    instance = new SingletonLazy();//               
                }
            }
        }
        return instance;
    }
    
    메모리 모델 의 명령 정렬 문 제 를 해결 하기 위해 다시 업그레이드 하 는 방법 3.
    
    //   volatile    ,        ,             
    private static volatile SingletonLazy instance;
    /**
     *          :
     *  getInstance3()   ,              ,          
     *
     * DCL        (Double-Checked-Locking)             
     *
     *         ――      
     * @return
     */
    public static SingletonLazy getInstance3plusplus() {
        if (instance == null) {//    null     
            //              ,    
            //     A   B
            synchronized (SingletonLazy.class){//      
                //    A          B   A  new SingletonLazy();   
                //  A       ,B      ,      instance == null    
                //      ,B        SingletonLazy
                if (instance == null){//      
                    instance = new SingletonLazy();//               
                }
            }
        }
        return instance;
    }
    
    단일 모드-게으름뱅이 호출:
    
    @Test
    public void testSingletonLazy(){
        SingletonLazy.getInstance().process();
    }
    3.단일 모델-굶 주 린 식
    
    /**
     * @Auther: csp1999
     * @Date: 2020/11/06/21:39
     * @Description:       -   
     */
    public class SingletonHungry {
        //                
        private static SingletonHungry instance = new SingletonHungry();
        private SingletonHungry(){}
        /**
         *        
         */
        public void process() {
            System.out.println("       !");
        }
        public static SingletonHungry getInstance(){
            return instance;//                
        }
    }
    
    단일 모드-굶 주 린 식 호출:
    
    @Test
    public void testSingletonHungry(){
        SingletonHungry.getInstance().process();
    }
    
    굶 주 린 한식 단일 모드 는 클래스 를 불 러 올 때 대상 을 직접 예화 하기 때문에 라인 안전 문 제 를 고려 할 필요 가 없다.
  • 장점:실현 이 간단 하고 라인 안전 문 제 를 고려 할 필요 가 없다.
  • 단점:이 대상 의 인 스 턴 스 를 사용 하 든 안 하 든 인 스 턴 스 대상 은 이 메모 리 를 계속 사용 하고 있 습 니 다.
  • 게으름뱅이 와 굶 주 린 사람 은 어떻게 선택 합 니까?
  • 대상 의 메모리 사용량 이 크 지 않 고 복잡 하지 않 으 면 굶 주 린 사람 을 직접 사용 하면 됩 니 다.
  • 다른 상황 은 모두 게으름뱅이 방식(우선 선택)을 사용한다.
  • 총결산
    글 은 정 해진 시간 에 업데이트 되 지 않 습 니 다.가끔 은 하루 에 몇 편 을 더 업데이트 할 때 가 있 습 니 다.만약 에 복습 을 도와 지식 을 공 고 히 한다 면 지원 해 주 십시오.나중에 억 점 의 업 데 이 트 를 할 것 입 니 다!저희 의 또 다른 콘 텐 츠 에 많은 관심 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기