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

    public class Singleton {
    
        private static Singleton instance = null;
    
        private Singleton() {
        }
    
        /*
         * 懒汉单例模式,线程不安全
         */
        public static Singleton getInstanceLazy() {
            if (instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    
        /*
         * 同步单例模式1,线程安全,浪费时间,需要判断同步锁
         */
        public static synchronized Singleton getInstanceSync1() {
            if (instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    
        /*
         * 同步单例模式2,线程安全,浪费时间,需要判断同步锁
         */
        public static Singleton getInstanceSync2() {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
            return instance;
        }
    
        /*
         * 双重校验单例模式,并发量不多,安全性不高的情况下使用,可能出现JVM编译过程中,指令重排的优化过程,导致
         * 对象还没有初始化,就分配了空间,也就是说instance!=null,但是却没有初始化
         */
        public static Singleton getInstanceDoubleSync() {
            if (instance != null) {
                synchronized (Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
        
        /*
         * 内部类单例模式,线程安全,延迟加载,(内部静态类会延迟加载,即用到的时候再显示)
         */
        private static class SingletonHolder {
            private static Singleton singleton = new Singleton();
        }
        
        public static Singleton getInstanceInner(){
            return SingletonHolder.singleton;
        }
    }
    public enum SingletonEnum {  
        /** 
         * 1.从Java1.5开始支持; 
         * 2.无偿提供序列化机制; 
         * 3.绝对防止多次实例化,即使在面对复杂的序列化或者反射攻击的时候; 
         */  
      
        instance;  
      
        private String others;  
      
        SingletonEnum() {  
      
        }  
      
        public void method() {  
            System.out.println("SingletonEnum");  
        }  
      
        public String getOthers() {  
            return others;  
        }  
      
        public void setOthers(String others) {  
            this.others = others;  
        }  
    }  
  • 相关阅读:
    WPF窗口和用户控件事件相互触发
    C#排序算法总结
    C#.NET操作数据库通用类
    在C#的WPF程序使用XAML实现画线
    centos7 用户介绍
    Linux系列2
    nginx的使用
    TCP协议、三次握手以及滑动窗口等的介绍(计算机网络基础知识)
    mysql的
    jQuery的东西
  • 原文地址:https://www.cnblogs.com/imeiling/p/6393647.html
Copyright © 2011-2022 走看看