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