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以上。



    用放荡不羁的心态过随遇而安的生活
  • 相关阅读:
    C#磁吸屏幕窗体类库
    准备
    我写的诗
    How to turn off a laptop keyboard
    How to tell which commit a tag points to in Git?
    Why should I care about lightweight vs. annotated tags?
    How to get rid of “would clobber existing tag”
    Facebook, Google and Twitter threaten to leave Hong Kong over privacy law changes
    The need for legislative reform on secrecy orders
    Can a foreign key be NULL and/or duplicate?
  • 原文地址:https://www.cnblogs.com/re-myself/p/5532490.html
Copyright © 2011-2022 走看看