zoukankan      html  css  js  c++  java
  • 单例模式

    //单例 饿汉模式:创建一个静态实例,私有化构造器,这个是线程安全的
    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
    }
  • 相关阅读:
    Machine Learning Basic Knowledge
    What is the reason that a likelihood function is not a pdf?
    MySql 增加字段 删除字段 修改字段名称 修改字段类型
    Manual install on Windows 7 with Apache and MySQL
    linux 解压命令大全[转]
    MVC2项目实践
    JSP显示新闻
    servlet应用
    login登录页面
    java web基础
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/10906574.html
Copyright © 2011-2022 走看看