1.懒汉单例模式,是在使用时判断对象是否存在,因此,是非线程安全的,需要通过添加synchronized对创建对象部分加锁;
如何加锁:
1.首先想到的是在getInstance方法加锁;
如: public static 类名 synchronized getInstance(){
if(null == obj ){
obj = new 类名();
}
return obj;
}
注: 该方法可行,可以保证所创建对象唯一,但是有可能导致线程阻塞;
2.使用synchronized代码块(由于JVM内部模型优化,执行可能有误)
如:public static 类名 getInstance(){
//双重判断对象 是否存在,外出用于判断是否调用线程进入阻塞状态,提高效率,
if(null == obj){
synchronized(类名.class){
if(null == obj ){
obj = new 类名();
}
}
}
return obj;
}
建议使用静态内部类方式实现的单例
public class A {
private static class B{
private static final A a = new A();
}
public static A getInstance(){
return B.a;
}
private A(){
}
}