zoukankan      html  css  js  c++  java
  • 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() {  
        }  
    }  
    

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

  • 相关阅读:
    idea 配置mapper.xml代码提示
    vue配置请求转发解决跨域问题
    MySQL 连接出现 Authentication plugin 'caching_sha2_password' cannot be loaded
    判断链表是否有环(Java实现)
    Java实现链表反转(借助栈实现)
    IHS代理遇到404的问题
    麒峰可视化表单设计器vue版本
    2021.5.30发布内容
    表单常见问题说明
    排序算法与查找算法在项目中的实际应用
  • 原文地址:https://www.cnblogs.com/JAYIT/p/5051184.html
Copyright © 2011-2022 走看看