先看代码:

package com.roocon.thread.t5;public class Singleton {private Singleton(){}private static Singleton instance = new Singleton();public static Singleton getInstance(){return instance;}
}

package com.roocon.thread.t5;public class Main {public static void main(String[] args) {Singleton s1 = Singleton.getInstance();Singleton s2 = Singleton.getInstance();Singleton s3 = Singleton.getInstance();Singleton s4 = Singleton.getInstance();System.out.println(s1);System.out.println(s1);System.out.println(s1);System.out.println(s1);}
}

运行结果:

com.roocon.thread.t5.Singleton@5cad8086
com.roocon.thread.t5.Singleton@5cad8086
com.roocon.thread.t5.Singleton@5cad8086
com.roocon.thread.t5.Singleton@5cad8086

所谓的饿汉模式:不管是否使用到instance这个实例,我们都在创建的过程中就对它进行实例化。

那么,饿汉模式是否会出现线程安全问题呢?

出现线程安全问题需要满足三个条件:

1.多线程的环境下

2.必须有共享资源

3.对资源进行非原子性操作

根据以上代码,我们发现,使用饿汉式,在调动getInstance方法时,就只干了一件事,那就是返回Instance实例。这个操作是原子性操作。因此,饿汉式不存在线程安全问题。

饿汉式的不足:不管是否需要使用到该实例,在创建的时候就已经实例化了。但其实在程序中根本没有用到该实例变量,就没必要先对它进行实例化。

推荐是在使用它的时候才对它进行实例化,这就是所谓的懒汉式单例模式。

转载于:https://www.cnblogs.com/sunnyDream/p/8011040.html

单例模式中的饿汉模式相关推荐

  1. 【设计模式】之单例模式中的饿汉模式和懒汉模式

    本文内容:什么是单例模式,单例的作用,饿汉模式,懒汉模式的安全与非安全的实现,饿汉模式与懒汉模式的区别. 什么是单例模式? 单例模式:保证一个类,仅有一个实例.提供一个访问它的全局访问点. 单例的作用 ...

  2. 23种设计模式C++源码与UML实现--单例模式中的饿汉模式和懒汉模式

    单例模式 单例模式是一种对象创建模式,使用单例模式,可以保证为一个类生成唯一的实例对象.也就是说在这个程序空间该类只有一个实例对象. GoF对单例的定义:保证一个类.只有一个实例存在,同时提供对该实例 ...

  3. 【设计模式:单例模式】单例模式01:饿汉模式

    单例模式:饿汉模式 正文开始@Assassin 目录: 单例模式:饿汉模式 1. 什么是设计模式? 2. 单例设计模式: 2.1 什么是单例模式? 2.2 单例模式应用实例: 1. 什么是设计模式? ...

  4. 单例模式的创建(饿汉模式懒汉模式)

  5. java设计模式之单例模式|单例模式之饿汉模式、懒汉模式、枚举方式|最详细的6种懒汉模式详解

    目录 一.单例模式 二.饿汉模式和懒汉模式 1.饿汉模式,线程安全 2.懒汉模式 懒汉模式1,线程不安全(不常用) 懒汉模式2,线程安全(不常用) 懒汉模式3,线程安全,双重校验(不常用) 懒汉模式4 ...

  6. 单例模式下的懒汉和饿汉模式

    1 //单例模式---懒汉模式 2 public class Apple{ 3 //创建一个成员,在内存中只有一个拷贝 4 private static Apple apple = null; 5 p ...

  7. 创建型模式:单例模式(懒汉+饿汉+双锁校验+内部类+枚举)

    单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创 ...

  8. 单例模式---懒汉模式与饿汉模式

    单例模式:1)一个类只能创建一个实例2)构造函数和静态变量(加载类时即初始化)需为private3)get方法应该为public static,可供全局访问 //懒汉模式 public class l ...

  9. 设计模式——单例模式(懒汉模式,饿汉模式)

    声明: 本博客参考C语言中文网和优秀博客总结得出: (1)C语言中文网链接 (2)优秀博客链接 单例模式的定义: 指一个类只有一个实例,且该类能自行创建这个实例的一种模式.例如,Windows 中只能 ...

  10. 单例模式的四种实现方式(饿汉模式、懒汉模式、静态内部类、枚举类)

    首先,设计模式是我们程序员在软件开发过程中面临的一般问题的解决方案,通过学习设计模式可以使我们在编程时更加有条理性,同时培养我们写代码的思维能力,从而提高我们的工作效率.接下来就跟着博主的脚步往下走吧 ...

最新文章

  1. 今天聊聊分布式锁 No.86
  2. 电脑课装b专用代码_FANUC伺服电机代码表(完整版)
  3. 032_jQuery Ajax的load方法
  4. SpringMVC框架介绍
  5. java接口构建英雄属性_Java开发学习心得(三):项目结构
  6. SAP OData服务性能测量的四种办法
  7. 得到指定进程所有窗口。显示 影藏 置顶。
  8. 深度学习案例之基于 CNN 的 MNIST 手写数字识别
  9. Linux打包软件版本带时间,带你写一个 linux 下的打包软件 tar
  10. c语言案例朗读工具源码,C语言编写简单朗读小工具(有源码)
  11. 服务器本地文件传输,服务器 本地 文件传输
  12. sqlserver2008链接服务器的使用和oracle11g客户端修改字符集
  13. 《RHEL6.3 FTP服务器虚拟用户的配置(含图)》——如此简单
  14. Ros学习笔记(四)创建Ros消息
  15. C# aspx 数据绑定集中(待修改)
  16. 数据库中的左连接(left join)和右连接(right join)区别
  17. python小程序 --指法练习
  18. 【源码阅读 | 03】only-allow 统一规范团队包管理器
  19. 浅聊智能推荐下的人物画像
  20. 【转载】任正非:鼓足干劲,力争上游,不畏一切艰难困苦

热门文章

  1. xcode 把cocos2d-x 以源码的形式包含进自己的项目适合, 性能分析问题的错误
  2. Python 模块,包与分发
  3. Sql Server 2005资源瓶颈监控(二)
  4. php enum 数字类型插入失败的解决办法
  5. 省选专练HAOI2015树上操作
  6. Andoid游戏【真情表白】让你心爱的人在游戏中感受真情!
  7. 利用AjaxPro从客户端调用服务端函数的方法
  8. java day21【缓冲流、转换流、序列化流】
  9. LeetCode 459. 重复的子字符串(Repeated Substring Pattern)
  10. 各种进制的学习与转换