JAVA单实例模式

有错请指出


单实例模式:

一个类只能有一个实例对象

例如:计算机可以有多个打印作业,但是只能有一个正在打印


package test;

/*
 * 这个是先初始化对象。
 * 称为:饿汉式
 * class Single {
	
	private Single() {
	}

	private static Single s = new Single();

	public static Single getInstance() {
		return s;
	}
}
 * 
 * 
 * */

//开发时多用饿汉式

// 对象是方法被调用时,才初始化,也叫做对象的延时加载,称为:懒汉式
//Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象
//加synchronized是为了避免单实例对象在内存中可能加载多个对象,但是效率低下
//或者如下
//最终还是饿汉式更加实用;
class Single2{
	private static Single2 s=null;
	private Single2(){};
	/*
               方法一
            public static synchronized Single2 getInstance(){
		if(s==null)
			s=new Single2();
		return s;
	}*/
           /*方法二*/
	public static Single2 getInstance(){
		if(s==null){
			synchronized(Single.class){
				if(s==null)
					s=new Single2();
			}
		}
		return s;
	}
}

//定义单例时建议使用饿汉式

如果不加synchronized,在多线程时可能出现创建多个实例的情况分析


加了synchronized之后

a线程就算判断完之后等在了if之后,b线程也进不去if判断,a线程独占第二个if判断(针对方法二)

                                                        

                                                                                        -------------------------By   仔鸡

猜你喜欢

转载自blog.csdn.net/qq_37325788/article/details/80206948
今日推荐