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


    一、懒汉式单例

    在第一次调用的时候实例化自己,Singleton的唯一实例只能通过getInstance()方法访问、线程不安全

    /**
     * Created by Admin on 2017/3/19.
     */
    public class Singleton {
        private static Singleton instance;
        private Singleton(){}
    
        public static Singleton getInstance() {
            if(instance==null){
                instance=new Singleton();
            }
            return instance;
        }
    }

    解决方案:


    1. 在getInstance方法上加同步
    /**
     * Created by Admin on 2017/3/19.
     */
    public class Singleton {
        private static Singleton instance;
        private Singleton(){}
    
        private static synchronized Singleton getInstance() {
            if(instance==null){
                instance=new Singleton();
            }
            return instance;
        }
    }

      2.双重检查锁定

    public class Singleton {
        private static Singleton instance;
        private Singleton(){}
    
        private static Singleton getInstance() {
            if(instance==null){
                synchronized(Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }

    3.3、静态内部类

    这实现了线程安全,又避免了同步带来的性能影响

    /**
     * Created by Admin on 2017/3/19.
     */
    public class Singleton {
        private  Singleton(){}
        private static class singleLazy{
            private static final Singleton instance=new Singleton();
        }
    
        private static final Singleton getInstance() {
                    return singleLazy.instance;
        }
    }

    二、饿汉式单例

    饿汉式单例类.在类初始化时,已经自行实例化

    /**
     * Created by Admin on 2017/3/19.
     */
    public class Singleton {
        private  Singleton(){}
            private static final Singleton instance=new Singleton();
    
        private static Singleton getInstance() {
                    return instance;
        }
    }
  • 相关阅读:
    msgs no .h file
    我们为之奋斗过的C#之---简单的库存管理系统
    我们为之奋斗过的C#-----C#的一个简单理解
    套接字之sendto系统调用
    套接字之msghdr结构
    套接字之select系统调用
    套接字之close系统调用
    TCP之listen&backlog
    套接字之相关系统调用的调用流程
    套接字之shutdown系统调用
  • 原文地址:https://www.cnblogs.com/tk55/p/6581325.html
Copyright © 2011-2022 走看看