• java设计模式----单例模式


    单例模式保证一个类中只有一个实例且该实例易于外界访问。

    懒汉模式(实现了懒加载,不需要同步的情况下效率低)

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

    饿汉模式(基于classloder机制避免了多线程的同步问题)

    public static class Singleton{
        //在自己内部定义自己的一个实例,只供内部调用
        private static final Singleton instance = new Singleton();
        private Singleton(){
            //do something
        }
        //这里提供了一个供外部访问本class的静态方法,可以直接访问
        public static Singleton getInstance(){
            return instance;
        }
    }
    

     懒汉模式和饿汉模式都是在类初始化即实例化instance

    双重锁模式

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

    静态内部类(classloder的机制来保证初始化instance时只有一个线程,只有被调用的时候instance才会初始化,省资源)

    public class Singleton {    
            private static class LazyHolder {    
               private static final Singleton INSTANCE = new Singleton();    
            }    
            private Singleton (){}    
            public static final Singleton getInstance() {    
              return LazyHolder.INSTANCE;    
            }    
        }    
    

    枚举

    public enum Singleton {  
        INSTANCE;  
        public void whateverMethod() {  
        }  
    }  
    

    它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象  

  • 相关阅读:
    4、线程--线程同部
    3、线程--线程调度
    2、线程--线程之前的状态转换
    1、线程--Thread&Runnable创建线程
    5、JUC--实现 Callable 接口
    13、JUC--ForkJoinPool 分支/合并框架 工作窃取
    linux连接iscsi存储方法
    ORA-01031: insufficient privileges 错误解决
    【opatch打补丁】oracle10.2.0.5.0升级10.2.0.5.9 for linux
    错误 ORA-01102: cannot mount database in EXCLUSIVE mode 的处理方法
  • 原文地址:https://www.cnblogs.com/JAYIT/p/5051184.html
Copyright © 2020-2023  润新知