单例设计模式
设计模式之单例设计模式:
使用单例设计模式的目的是为了保证类只被实例化一次,系统内存中只存在一个对象。
单例设计模式又分为懒汉式设计模式和饿汉式设计模式。
饿汉式:
public class Single {
private static final Single single = new Single();
private Single(){};
public static Single getInstance(){
return single;
}
}
此实现是线程安全的,多个线程进行访问时不会实例化多个对象,因为static属性只会被初始化一次,
缺点是无论是否用到该实例都会被初始化,无故的开销变大
懒汉式:
public class Single {
private static Single single = null;
private Single(){};
public static Single getInstance(){
if(single==null)
single = new Single();
return single;
}
}
这个实现保证了只有在调用该类的时候对象才被初始化(延迟创建),实例的延迟加载
但是缺点是线程不安全,当多个线程同时访问的时候,极可能实例化出多个对象。
当多线程访问时为了避免出现创建多个对象可以使用同步函数对该方法进行加锁
public class Single {
public static Single single = null;
private Single(){};
public staticsynchronizedSingle getInstance(){
if(single==null)
single = new Single();
return single;
}
}
这就存在一个问题,就是每个线程访问时都要进行加锁判断处理增加了开销,可以使用同步代码块
来处理这一问题:
public class Single {
public static Single single = null;
private Single(){};
public static Single getInstance(){
if(single==null)
{
synchronized (Single.class)
{
single = new Single();
}
}
return single;
}
}
如果如此处理则就会只有第一个线程进行加锁处理,减少系统开销。