有错请指出
单实例模式:
一个类只能有一个实例对象
例如:计算机可以有多个打印作业,但是只能有一个正在打印
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 仔鸡