• java设计模式学习(四):单例模式


       单列模式:确保一个类只有一个实例,并提供一个全部访问点。单例模式主要应用于线程池、缓存中。单例模式主要有两种:懒汉模式和饿汉模式:

    饿汉模式:

    public class Singleton {
    
        private static Singleton singleton=new Singleton();
        
        private Singleton(){}
        
        public static Singleton getInstance(){
            return singleton;
        }
        
    }
    懒汉模式:

    public class SluSigleton {
    
        private static SluSigleton singleton=null;
        
        private SluSigleton(){}
    
        public static SluSigleton getInstance(){
            
            if(null == singleton){
                singleton=new SluSigleton();
            }
            return singleton;
        }
    }
    上面的代码会有问题,并不能保证一定只有一个实例,需要改进

    public class SluSigleton {
    
        private static SluSigleton singleton=null;
        
        private SluSigleton(){}
        /**
         * 多线程时,由于资源竞争,会导致创建多个实例,所以需要加锁
         * 这样会造成一定的负担,每次请求都要同步
         * @return
         */
        public static synchronized SluSigleton getInstance(){
            
            if(null == singleton){
                singleton=new SluSigleton();
            }
            return singleton;
        }
    }
    但是上面的代码会造成效率下降,可以对其进行改进

    public class LockSigleton {
    
        private volatile static LockSigleton sigleton;
        
        private LockSigleton(){}
        
        public static LockSigleton getInstance(){
            if(null == sigleton){
                synchronized (LockSigleton.class) {
                    if(null == sigleton){
                        sigleton=new LockSigleton();
                    }
                }
            }
            return sigleton;
        }
    }
    这个做法可以大大缩减getInstance()的时间。这个做法需要JDK在1.4以上。



    用放荡不羁的心态过随遇而安的生活
  • 相关阅读:
    rm
    Linux下解包/打包,压缩/解压命令
    虚拟机安装---vm12+ubuntukylin16.04
    mysql-5.6.41-winx64安装
    tensorflow学习笔记一------下载安装,配置环境(基于ubuntu16.04 pycharm)
    大一上学期C语言学习心得总结
    常见HTTP状态码
    Java语言基础及java核心
    linux下安装JMeter(小白教程)
    Linux下安装JDK(小白教程)
  • 原文地址:https://www.cnblogs.com/re-myself/p/5532490.html
Copyright © 2020-2023  润新知