此文转载
今天看某培训机构提供面试题中设计模式部分,对饱汉和饿汉比较感兴趣,就搜了一下,然后误人子弟,然后就觉得有必要记录一下
声明:本人没有看过设计模式的书籍,只是根据概念对比的看了一些博客;
首先示众一篇大错特错的文章,谁有CSDN帐号,提醒他把文章删了吧,错的离谱
https://blog.csdn.net/j_a_v_a_guan/article/details/48004007
经典写法: 懒汉和饿汉的最大区别就在于创建对象时候是否实例化;有new就是饿汉,反之就是懒汉,跟加不加synchronized ,没有关系 懒汉: public class SingleTon { private static SingleTon instance; private SingleTon() { } public static SingleTon getInstance() { if (instance == null) { instance = new SingleTon(); } return instance; } } 懒汉安全写法 public class SingleTon { // 静态实例变量加上volatile private static volatile SingleTon instance; // 私有化构造函数 private SingleTon() { } // 双重检查锁 public static SingleTon getInstance() { if (instance == null) { synchronized(Singleton.class){ if(instance == null){ instance = new SingleTon(); } } } return instance; } }
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
饿汉模式
public class SingleTon {
// 静态实例变量,直接初始化
private static SingleTon instance = new SingleTon();
// 私有化构造函数
private SingleTon() {
}
// 静态public方法,向整个应用提供单例获取方式
public static SingleTon getInstance() {
return instance;
}
}
================================================================================================================================================