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;  
        }  
    }  
  • 相关阅读:
    UVALive 6909 Kevin's Problem 数学排列组合
    UVALive 6908 Electric Bike dp
    UVALive 6907 Body Building tarjan
    UVALive 6906 Cluster Analysis 并查集
    八月微博
    hdu 5784 How Many Triangles 计算几何,平面有多少个锐角三角形
    hdu 5792 World is Exploding 树状数组
    hdu 5791 Two dp
    hdu 5787 K-wolf Number 数位dp
    hdu 5783 Divide the Sequence 贪心
  • 原文地址:https://www.cnblogs.com/imeiling/p/6393647.html
Copyright © 2011-2022 走看看