class Single
{
private Single();//私有化构造函数,让别别人无法创建是、该类的实例。
private static Single s=new Single();
//定义一个私有静态 Single类的引用,并创建一个实例,这里对我的理解是,当类载入内存,静态的成员同事创建,而且至执行一次。所以只有一个实例。
public static Single getInstance()//定义一个共有的静态方法,让外部能够获得,这个实例。
{
return s;
}
}
就这样就可以实现单列类了,当然着个类没什么功能,你想让他鱼油什么样的属性都可以加进去了,当然也可加各种方法。
二,懒汉式;
懒汉式在实际开发中不常用,看看他是怎么实现的。
class Single
{
private Single();//私有化构造函数,让别别人无法创建是、该类的实例。
private static Single s;
//定义一个私有静态 Single类的引用,与饿汉式不同的地方是,并不创建对象,而是在获取的方法创建,就是延时创建。
public static Single getInstance();//定义一个共有的静态方法,让外部能够获得,这个实例。
{
if(s==null){
s=new Single();
}
return s;
}
}
懒汉式也实现了。但这样实现有点小问题,因为创建对象是先判断再创建,当有多个线程都来获得这个实例的时候,有可能出现问题,例如有两个线程分别是A和B,当A调用getInstance(),是恰好执行到判断语句if(s==null)这是还没有对象,正准备创建对象,但CPU恰好切换了线程,A被挂起来,接B当A调用getInstance(),此时s==null,因为A 并没创建,那B 线程就自己创建了,CPU切换回A 的时候,继续执行创建的语句,有创建了一次对象。问题出现了吧,
那怎么解决呢,也很简单在getInstance()前加上同步锁synchronized,既可以了
public static synchronized Single getInstance();