一、饿汉式
不存在线程安全问题,无变化。
class Single
{
private static final Single s = new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
二、懒汉式
存在多线程安全问题:可能每个线程会拿到不同的对象,加入同步后会存在效率问题,因为都需要进入同步代码块来判断s是否为空。
加入同步为了解决多线程安全问题
加入双重判断是为了解决效率问题。
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s = new Single();
}
}
return s;
}
}