单例设计模式的两种方式
饿汉式 当类加载的时候,就创建对象:
class Single
{
private Single(){}//构造函数私有化
private static final Single s=new Single();//建立对象
public static Single getInstance()//提供公共访问方式
{
return s;
}
}
1
2
3
4
5
6
7
8
9
懒汉式 当使用的使用,才去创建对象:
class Single
{
private Single(){}
private static Single s;
public static Single getInstance()
{
if(s==null)
s=new Single();
return s;
}
}
1
2
3
4
5
6
7
8
9
10
11
饿汉式和懒汉式的区别:
饿汉式是类一加载进内存就创建好了对象;
懒汉式则是类才加载进内存的时候,对象还没有存在,只有调用了 getInstance()方法时,对象才开始创建。
懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题,解决线程安全问题可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就变慢了,所以可以加双重判断来提高程序效率。
改成同步:
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s=new Single();
}
}
return s;
}
1
2
3
4
5
6
7
8
9
10
11
12
最后:饿汉式简单安全。懒汉式多线程的时候易发生问题。所以开发常用饿汉式。