单例设计模式:保证一个类在内存中的对象唯一性
如何保证唯一性:
1.不允许其他程序用new创建该类对象
2.在创建一个本类实例
3.对外提供一个方法让其他程序也可以获取该对象
饿汉式(开发用的多)
//饿汉式:无线程安全问题
class Single1
{
private static final Single s=new Single();
private Single(){}
public static Single getSingle()
{
return s;//只有一句
}
}
懒汉式(面试用的多)
class Single2
{
private static Single2 s=null;//延迟对象的创建
private Single2(){}
public static Single2 getInstance(){
if(s==null)
s=new Single2();
return s;
}
}
多线程下:懒汉式有线程安全问题,操作共享的s的语句有两条
解决:
class Single2
{
private volatile static Single s=null;
private Single(){}
public static Single getSingle()//不加同步函数是因为效率不高
{
if(s==null) //提高效率
{
synchronized(Single2.class)//解决线程安全问题
{
if(s==null)
s=new Single();
}
}
return s;
}
}