/*
单例设计模式
*/
//饿汉式
class ehan
{
public static final ehan s = new ehan(); //饿汉 先加载实例
ehan(){};
public static ehan getInstance()
{
return s;
}
}
//懒汉式
//若没加锁,在多线程的环境下可能会出现安全问题
class lanhan
{
public static lanhan s = null; //懒汉式 延迟加载实例到用 (调用getInstance)时才加载
lanhan (){};
/*法1:用同步代码块来做*/
public static synchronized lanhan getInstance1()
{
if(s==null)
s = new lanhan();
return s;
}
/*法1 比较低效 每次都要去判断锁
法二:用双重判断s是否为空来做*/
public static lanhan getInstance()
{
if(s==null) // 第三步 外部判断 减少判断次数
{
synchronized(lanhan.class) // 第二步加锁 ,锁为类的字节码,不能用this,为静态函数
{
if(s==null) // 第一步先做普通的判断
{
s = new lanhan();
}
}
}
return s;
}
}
class SingleDemo2
{
public static void main(String []args)
{
ehan.getInstance();
lanhan.getInstance();
}
}