懒汉模式和饿汉模式
2017-03-29 11:15
483 查看
今天在看《java编程思想》的访问权限控制一章中,里面讲到private关键字,一个单例模式,原来看过这种写法,但是一直不明白其中的道理,看过之后就明白了。
下面是这个栗子
构造方法被private关键字修饰,外界访问不到构造方法,只能通过getSingle方法获得
所以只会返回一个实例。
可以看到,创建只会返回一个实例。这种加载方式也叫饿汉加载模式。为什么叫饿汉模式呢,因为类在初始化的时候就会实例化自己,而不是在需要的时候才回去加载,下面可以比较一下懒汉模式。
另外补充一点的是,由于类在加载的时候就已经初始化,所以不会有多线程问题。(多线程问题,暂时还未理解透彻,不敢多说)
懒汉模式:
只会返回一个实例
所以有些书被称为经典还是有一定的道理,人丑就要多读书!!!!哈哈
下面是这个栗子
public class Single { //在对象加载的时候只进行一次 private static Single single = new Single(); private Single() {} public static Single getSingle(){ return single; } }
构造方法被private关键字修饰,外界访问不到构造方法,只能通过getSingle方法获得
所以只会返回一个实例。
for (int i = 0; i < 5; i++) { System.out.println(Single.getSingle()); }
可以看到,创建只会返回一个实例。这种加载方式也叫饿汉加载模式。为什么叫饿汉模式呢,因为类在初始化的时候就会实例化自己,而不是在需要的时候才回去加载,下面可以比较一下懒汉模式。
另外补充一点的是,由于类在加载的时候就已经初始化,所以不会有多线程问题。(多线程问题,暂时还未理解透彻,不敢多说)
懒汉模式:
public class LazySingle { private static LazySingle lazySingle = null; private LazySingle(){ } public synchronized static LazySingle getInstance(){ //线程不安全,加锁 if (lazySingle == null) { lazySingle = new LazySingle(); } return lazySingle; }
for (int i = 0; i < 5; i++) { System.out.println(LazySingle.getInstance()); }
只会返回一个实例
所以有些书被称为经典还是有一定的道理,人丑就要多读书!!!!哈哈
相关文章推荐
- java设计模式之单例模式写法,懒汉,饿汉,双检锁
- Singleton 单例模式(懒汉方式和饿汉方式)
- 单例模式中的懒汉模式和饿汉模式
- 单类设计模式 --- 饿汉模式 & 懒汉模式
- 从java.lang.Runtime看单例懒汉饿汉模式的选择
- 单例模式——懒汉模式和饿汉模式
- 单例设计模式(饿汉模式与懒汉模式)
- 单例模式之懒汉模式与饿汉模式的对比
- 设计模式C++实现(4)——饿汉懒汉之单例模式
- 饿汉模式和懒汉模式的多线程访问问题
- 懒汉模式与饿汉模式
- java 单例模式 -饿汉 -懒汉
- 设计模式之单例模式:懒汉&饿汉
- 单例模式,懒汉模式,饿汉模式区别
- Java中的单例设计模式之饿汉模式、懒汉模式
- 单例模式中的懒汉模式和饿汉模式
- Singleton 单例模式(懒汉方式和饿汉方式)
- 单例模式简单解析--Singleton 单例模式(懒汉方式和饿汉方式)
- 从java.lang.Runtime看单例懒汉饿汉模式的选择
- 【单例模式】——饿汉模式与懒汉模式及其区别