zoukankan      html  css  js  c++  java
  • 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以上。



    用放荡不羁的心态过随遇而安的生活
  • 相关阅读:
    第四次实验报告
    第三次实验报告
    循环结构课后反思
    第二次实验报告
    第一次实验报告1
    第一次作业
    第二次实验报告 总结
    第九章实验报告
    第八章实验报告
    第六次实验报告
  • 原文地址:https://www.cnblogs.com/re-myself/p/5532490.html
Copyright © 2011-2022 走看看