• 单例模式


    //单例 饿汉模式:创建一个静态实例,私有化构造器,这个是线程安全的
    public class Sington {
        private static final Sington INSTANCE=new Sington();
        //私有化构造器
        private Sington(){
    
        }
    
        public Sington getInstance(){
            return INSTANCE;
        }
    }
    
    //单例 懒汉方式
    public class Sington {
        private static  Sington INSTANCE=null;
    
        private Sington(){}
    
        public static Sington getInstance(){
            if(null==INSTANCE){
                //线程不安全方式,多个线程同时进入这里的话,会创建多个对象
                INSTANCE= new Sington();
            }
            return INSTANCE;
        }
        //线程安全,但每次获取对象都要获取锁,实际上只要第一个请求访问获取了对象后,之后请求不用再创建对象了,因此这种方式会导致效率变低
        public static synchronized Sington getInstance2(){
            if(null==INSTANCE){
                INSTANCE = new Sington();
            }
            return INSTANCE;
        }
    
    
        public static Sington getInstance3(){
            if(null==INSTANCE){
                //多个请求可以同时到达这里,之后都会执行下面代码,只是排队执行,因此还是不安全
                synchronized (Sington.class){
                    INSTANCE= new Sington();
                }
            }
            return INSTANCE;
        }
        //双重判断
        public static Sington getInstance4(){
            if(null==INSTANCE){
                //多个请求可以同时到达这里,然后排队进下面方法
                synchronized (Sington.class){
                    if(null==INSTANCE){ //多个请求排队进入该方法后,只要第一个创建了对象,后面的请求就不会创建对象了,因为此时INSTANCE已经不为空了
                        INSTANCE= new Sington();
                    }
                }
            }
            return INSTANCE;
        }
    
    }
    //静态内部类实现单例模式,这个会懒加载并且线程安全
    public class Sington {
    
    
        private Sington(){}
    
        private static class SingtonInstance{
            private static final Sington INSTANCE=new Sington();
        }
    
        public Sington getInstance(){
            return SingtonInstance.INSTANCE;
        }
    
    }
    //枚举实现单例模式
    public enum SingtonEnum {
        INSTANCE
    }
  • 相关阅读:
    Count and Say
    Valid Sudoku
    Find First and Last Position of Element in Sorted Array
    Search in Rotated Sorted Array
    Longest Valid Parentheses
    web前端中文教程库
    三代基因组拼接软件--Falcon篇
    使用ThreadPoolExecutor并行执行独立的单线程任务
    python中的计时器:timeit
    Python教程
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/10906574.html
Copyright © 2020-2023  润新知