zoukankan      html  css  js  c++  java
  • 设计模式:单例模式的三种创建方式及其各自的优缺点

    单例模式: 确保一个类仅仅有一个实例,并提供全局訪问点。在Java中实现单例模式须要私有的构造器,一个静态方法和一个静态变量。确定在性能和资源上 的限制,怎样选择适当的方案来实现单例,以解决多线程的问题。

    假设使用多个类载入器,可能导致单例失效产生多个实例。双重检查加锁不适用于1.4及更早版本号的java


    方式1:

    package singleton;
    /**
     * 同步getInstance()方法:
     * 有点:保证线程安全。
     * 缺点:性能大大下降
     * @author Arvon
     *
     */
    public class Singleton1 {
    	private static Singleton1 instance;
    	private Singleton1(){}
    	public static synchronized Singleton1 getInstance(){
    		if(instance==null)
    				instance = new Singleton1();
    		return instance;
    	}
    }
    



    方式2:

    package singleton;
    /**
     * “急切”创建实例
     * 长处:线程安全
     * 缺点: 添加程序创建和执行时的负担
     * @author Arvon
     *
     */
    public class Singleton2 {
    	private static Singleton2 instance = new Singleton2();
    	private Singleton2(){}
    	public static  Singleton2 getInstance(){
    		return instance;
    	}
    }
    


    方式3:

    package singleton;
    /**
     * 双重检查加锁
     * @author Administrator
     *
     */
    public class Singleton3 {
    	private volatile static Singleton3 instance;
    	private Singleton3(){}
    	public static  Singleton3 getInstance(){
    		if(instance==null)
    			synchronized (Singleton3.class) {  //仅仅第一次进入同步块
    				if(instance==null)instance = new Singleton3();
    			}
    		return instance;
    	}
    }
    


  • 相关阅读:
    AtCoder Grand Contest 013 C:Ants on a Circle
    AtCoder Grand Contest 010 C:Cleaning
    055 列表推导式
    054 三元表达式
    05 Python爬虫之信息标记与提取方法
    053 迭代器
    052 装饰器
    051 闭包函数
    04 Python爬虫之Beautiful Soup库
    03 Python爬虫之Requests网络爬取实战
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6920339.html
Copyright © 2011-2022 走看看