• java设计模式_单例


    public class Singleton {
    	public static void main(String[] args) throws Exception {
    		System.out.println(Class.forName("S1"));
    		System.out.println(Class.forName("S2"));
    		System.out.println(Class.forName("S3"));
    		System.out.println(Class.forName("S4"));
    	}
    }
    
    /*
     * 预先加载法 
     * 优点:1.线程安全的, 2.在类加载的同时已经创建好一个静态对象,调用时反应速度快。
     * 缺点: 资源利用效率不高,可能这个单例不会需要使用也被系统加载
     * (资源利用效率不高,可能getInstance永远不会执行到,但是执行了该类的其他静态方法
     * 或者加载了该类(class.forName),那么这个实例仍然初始化了)
     */
    class S1 {
    	private S1() {
    		System.out.println("ok1");
    	}
    
    	private static S1 instance = new S1();
    
    	public static S1 getInstance() {
    		return instance;
    	}
    }
    
    /*
     * initialization on demand,延迟加载法 (考虑多线程) 
     * 优点:1.资源利用率高 
     * 缺点:第一次加载是发应不快,多线程使用不必要的同步开销大
     */
    class S2 {
    	private S2() {
    		System.out.println("ok2");
    	}
    
    	private static S2 instance = null;
    
    	public static synchronized S2 getInstance() {
    		if (instance == null)
    			instance = new S2();
    		return instance;
    	}
    }
    
    /*
     * initialization on demand - double check 延迟加载法改进之双重检测 (考虑多线程)
     * 优点:1.资源利用率高
     * 缺点:第一次加载是发应不快 ,由于java 内存模型一些原因偶尔会失败
     */
    class S3 {
    	private S3() {
    		System.out.println("ok3");
    	}
    
    	private static S3 instance = null;
    
    	public static S3 getInstance() {
    		if (instance == null) {
    			synchronized (S3.class) {
    				if (instance == null)
    					instance = new S3();
    			}
    		}
    		return instance;
    	}
    }
    
    /*
     * initialization on demand holder (考虑多线程) 
     * 优点:1.资源利用率高 缺点:第一次加载是发应不快
     */
    class S4 {
    	private S4() {
    		System.out.println("ok4");
    	}
    
    	private static class S4Holder {
    		static S4 instance = new S4();
    	}
    
    	public static S4 getInstance() {
    		return S4Holder.instance;
    	}
    }


  • 相关阅读:
    Android签名详解(debug和release)
    Java反射机制的学习
    Android应用开发中如何使用隐藏API(转)
    asp.net购物车,订单以及模拟支付宝支付(二)---订单表
    asp.net购物车,订单以及模拟支付宝支付(一)---购物车表及添加购物车流程
    asp.net权限控制的方式
    .Net使用程序发送邮件时的问题
    Word2016“此功能看似已中断 并需要修复”问题解决办法
    C#字符串来袭——因为爱,所以爱
    C#时间的味道——任时光匆匆我只在乎你
  • 原文地址:https://www.cnblogs.com/riskyer/p/3297265.html
Copyright © 2020-2023  润新知