zoukankan      html  css  js  c++  java
  • 一个单例模式的简单例子

    ex1:
    public class Singleton   
    {   
        private static final Singleton singleton = null;   
      
        private Singleton()   
        {   
        }   
        public static Singleton getInstance()   
        {   
            if (singleton== null)   
            {   
                singleton= new Singleton();   
            }   
            return singleton;   
        }   
    }  
     
    这个不多说了,肯定是错误的,如果多个线程访问的时候都是==null,那么接下来就是产生多个实例。不算单例模式。
    ex2:
    public class Singleton   
    {   
        private static final Singleton singleton = null;   
      
        private Singleton()   
        {   
        }   
        public static Singleton getInstance()   
        {   
            if (singleton== null)   
            {   
                synchronized (Singleton.class) {   
                    singleton= new Singleton();   
                }   
            }   
            return singleton;   
        }   

    这个虽然加了同步锁,但是如果多个线程同步访问==null,那么还是会产生多个实例,只是产生实例的时候同步而已。
    ex3:
     public class Singleton   
    {   
        private static final Singleton singleton = null;   
      
        private Singleton()   
        {   
        }   
        public static Singleton getInstance()   
        {   
            synchronized (Singleton.class)   
            {   
                if (singleton== null)   
                {   
                    singleton= new Singleton();   
                }   
            }   
            return singleton;   
        }   

    这个就可以了,但是这个地方对于每个访问的这个方法都是同步,而最需要的同步只是在new的地方,所以这样做虽然保证了单例,但是效率有点低哦。
    ex4:
    public class Singleton   
    {   
        private static final Singleton singleton = null;   
      
        private Singleton()   
        {   
        }   
        public static Singleton getInstance()   
        {   
            if (singleton== null)   
            {   
                synchronized (Singleton.class)   
                {   
                    if (singleton== null)   
                    {   
                        singleton= new Singleton();   
                    }   
                }   
            }   
            return singleton;   
        }   

    这个不错,保证了单例。这个叫做double-check 双重检查。
    还有一个比较简单的写法。
    ex5:

    public class Singleton    
    {    
        private static final Singleton singleton = new Singleton();
       
        private Singleton()    
        {    
        }    
        public static Singleton getInstance()    
        {    
            return singleton;    
        }    
    }  

    这样也可以,具体2种差别就不多说了。下面这个看起来要简单好多的哈


  • 相关阅读:
    毕业设计:参考文献(3)
    毕业设计:参考文献(5)
    毕业设计:参考文献(1)
    毕业设计:参考文献(7)
    毕业设计:参考文献(2)
    2021ICPC沈阳站游记
    2021CCPC广州站游记
    常用linux 脚本
    Jenkins调优实践
    linux工具安装
  • 原文地址:https://www.cnblogs.com/jrmy/p/14316348.html
Copyright © 2011-2022 走看看