设计模式:java单例模式 懒汉&饿汉
来源:互联网 发布:优爵网络 编辑:程序博客网 时间:2024/05/21 20:34
单例模式的懒汉饿汉区别就是是否在程序一开始就创建单例
- 懒汉:很懒,所以一开始不创建单例,等到需要用到的时候才创建单例,用时间换空间。
注意:懒汉单例是线程不安全的,如果有两个线程,我们称它们为线程1和线程2,在同一时间调用getInstance()方法,如果线程1先进入if块,然后线程2进行控制,那么就会有两个实例被创建。
所以我们需要使用synchronize关键字
//懒汉式单例模式 public class MySingleton { //设立静态变量 private static MySingleton mySingleton = null; private MySingleton(){ //私有化构造函数 System.out.println("-->懒汉式单例模式开始调用构造函数"); } //开放一个公有方法,判断是否已经存在实例,有返回,没有新建一个在返回 public static MySingleton getInstance(){ System.out.println("-->懒汉式单例模式开始调用公有方法返回实例"); if(mySingleton == null){ System.out.println("-->懒汉式构造函数的实例当前并没有被创建"); mySingleton = new MySingleton(); }else{ System.out.println("-->懒汉式构造函数的实例已经被创建"); } System.out.println("-->方法调用结束,返回单例"); return mySingleton; } }
- 饿汉:不懒,一开始就创建单例,空间换时间。线程安全,不用synchronize关键字
/** * 饿汉式单例模式 * MySingleton2 */ public static void myprint2(){ System.out.println("-----------------饿汉式单例模式----------------"); System.out.println("第一次取得实例(饿汉式)"); MySingleton2 s1 = MySingleton2.getInstance(); System.out.println("第二次取得实例(饿汉式)"); MySingleton2 s2 = MySingleton2.getInstance(); if(s1==s2){ System.out.println(">>>>>s1,s2为同一实例(饿汉式)<<<<<"); } System.out.println(); }
0 0
- Java设计模式之单例模式(懒汉/饿汉)
- 设计模式:java单例模式 懒汉&饿汉
- 多线程-单例设计模式懒汉 饿汉
- 懒汉单例设计模式
- java单例设计模式之懒汉模式
- java 单例模式 -饿汉 -懒汉
- 单例设计模式(C#) 懒汉模式
- 单例设计模式之懒汉模式
- 设计模式之单例模式:懒汉&饿汉
- 设计模式——单例模式(懒汉、饿汉)
- 设计模式-单例模式(懒汉、饿汉)
- 单例模式----懒汉+饿汉
- 单例模式(饿汉/懒汉)
- java设计模式之单例模式写法,懒汉,饿汉,双检锁
- Java设计模式简介及单例模式详解——“饿汉”与“懒汉”
- JAVA 多线程-单例设计模式-懒汉式
- java单例设计模式 饿汉式 懒汉式
- Java单例设计模式(饿汉式和懒汉式)
- 欢迎使用CSDN-markdown编辑器
- C语言实验——计算表达式
- Rxjava解析之二---源码
- php 不显示错误提示
- AsyncTask线程数超限问题
- 设计模式:java单例模式 懒汉&饿汉
- Maven私服搭建——nexus
- 基于Hadoop的朴素贝叶斯算法实现
- 在centos上面安装nexus
- C语言快速幂取模算法小结
- 近期学习情况总结2016.11.5
- BZOJ 1117: [POI2009]救火站Gas 贪心
- 11.5 考试驾到2
- 单点登录 -iwebshop模拟引用