懒汉式(线程安全,同步代码块儿)
代码演示
// 懒汉式 (线程安全_ 同步放法_)
class Singleton{
private static Singleton instance;
private Singleton() {
}
// 提供一个静态的公有方法 加入了同步处理的代码
// 解决线程安全问题
// 即懒汉式
// 我们在这里加一个关键字 synchronized
public static Singleton getInstance() {
if (instance == null) {
synchronized(Singleton.class){
instance = new Singleton();
}
}
return instance;
}
}
优缺点说明
- 这总方式,本意是想对于第四种实现方式的改进,因为前面同步方法效率太低, 改为同步产生实例化的的代码块
但是这种同步并不能起到线程同步的作用,跟第三种实现方式遇到的情形一致,假如一个线程进入了if(singleton == null)判断语句块儿,还未来得及往下执行,另一个线程也通过了这个判断语句,这时便会产生多个实例
结论:在实际开发中,不能使用这种方式(没多大卵用)