zoukankan      html  css  js  c++  java
  • 辛格尔顿

    辛格尔顿(Singleton),以保证一个类只有一个实例,并提供了一个全球性的接入点访问它。

    因为辛格尔顿Singleton它的类封装的唯一实例,因此,它可以妍格控制客户如何以及何时访问它访问。

    简单地说,它是受控访问的唯一的例子。

    package gof23;
    
    public class SingletonTest {
    	public static void main(String[] args) {
    		Singleton obj1 = Singleton.getInstance();
    		Singleton obj2 = Singleton.getInstance();
    		System.out.println(obj1 == obj2);
    	}
    }
    
    class Singleton {
    	private static Singleton instance = null;
    	
    	private Singleton() {     //构造方法让其private,这就堵死了外界利用new创建此类实例的可能
    		
    	}
    	
    	public static Singleton getInstance(){
    		if(instance == null) {
    			instance = new Singleton();
    		}
    		return instance;
    	}
    }
    
    结果为:

    true

    多线程时的单例

    多线程的程序中,多个线程同一时候,注意是同一时候訪问Singleton类,调用getInstance()方法,会有可能造成创建多个实例,这个时候能够给进程加一把锁进行处理。

    package gof23;
    
    import java.util.concurrent.locks.ReentrantLock;
    
    public class SingletonTest {
    	public static void main(String[] args) {
    		Singleton obj1 = Singleton.getInstance();
    		Singleton obj2 = Singleton.getInstance();
    		System.out.println(obj1 == obj2);
    	}
    }
    
    class Singleton {
    	private static Singleton instance = null;
    	private static ReentrantLock lock = new ReentrantLock();
    	private Singleton() {     //构造方法让其private,这就堵死了外界利用new创建此类实例的可能
    		
    	}
    	
    	public static Singleton getInstance(){
    		if(instance == null) {
    			lock.lock();      //先推断实例是否存在,不存在在加锁处理,能够避免每次调用getInstance方法都须要lock
    			try {
    				if(instance == null) {        //双重锁定
    					instance = new Singleton();
    				}
    			}
    			finally {
    				lock.unlock();      //释放锁
    			}
    		}
    		return instance;
    	}
    }
    

    执行结果为:

    true



    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    HDU 5313 bitset优化背包
    bzoj 2595 斯坦纳树
    COJ 1287 求匹配串在模式串中出现的次数
    HDU 5381 The sum of gcd
    POJ 1739
    HDU 3377 插头dp
    HDU 1693 二进制表示的简单插头dp
    HDU 5353
    URAL 1519 基础插头DP
    UVA 10294 等价类计数
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4611121.html
Copyright © 2011-2022 走看看