java单例饿汉和懒汉模式

今天总结一下单例模式,因为之前去面试,面试官老是问这个问题。
之前就是搞javaweb,也经常会用到单例,但是却不知道那就是单例。
首先说单例模式的两种方式,一种是饿汉式,就是在类初始化的时候,创建对象,这种方式是线程安全的,在程序运行期间就这一个对象。
另一种是懒汉式,懒汉式是在第一次使用时才创建对象,但是如果在多线程环境中要考虑线程安全问题。
比较喜欢的方式:饿汉式,不用考虑线程安全问题。

操作方法

  • 01

    首先定义一个Singleton类

  • 02

    编写测试类,饿汉模式: 定义一个静态的变量Singleton,直接初始化。 定义一个静态方法返回单例对象。

  • 03

    懒汉模式:存在线程安全问题。 定义对象s2,定义静态方法getS2获取对象。

  • 04

    编写测试类,测试是否会创建多个对象。 测试类创建500个线程,去调用getS2方法。

  • 05

    查看输出,发现输出了3个new,说明创建了三个对象,在高并发的多线程情况下,这种方式,显然不能满足单例的要求。

  • 06

    双重锁写法。在获取对象的时候,先判断是否为空,不为空直接返回,否则就加锁,加完锁然后再次需要判断是否为空。 先看一下正确的写法,测试一下,发现就一个输出,说明正确。

  • 07

    如果把里面的判null去掉,再去测试。发现有两个输出,说明不是单例。 为什么哪,因为可能出现这种情况,线程A、B同时请求加锁,此时两个线程都已通过了第一个为空的判断,假设A线程先加锁,B线程等待,然后A去创建对象;A释放锁后,B线程加锁,又创建了对象。

  • 08

    所以说,懒汉模式的正确写法为:

(0)

相关推荐

  • Eclipse for Java EE 安装、汉化和使用完美教程

    做java开发的朋友,都应该有一个适合自己的开发环境,而Eclipse IDE for Java EE Developers就是这么一个适合java开发的集成环境,完全免费,而且免安装,是java开发 ...

  • java单例模式在什么地方使用呢?

    当你阅读其他程序时,或者翻阅java API时,都会不经意间发现这个设计模式,单例模式在程序中用处非常大,可以这么说吧.好点的程序设计中,应该都会有它的身影出现的.那么什么是单例模式呢? 操作方法 0 ...

  • 单利模式的讲解

    几种单例模式的使用 操作方法 01 懒汉模式(线程不安全): 02 懒汉模式(安全): 03 饿汉模式: 04 饿汉模式,变种: 05 内部类模式: 06 枚举模式: 07 双重校验锁 08 测试类:

  • Java创建线程的两个方法

    操作方法 01 Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线 ...

  • 草根站长选择盈利模式的三个要点

    做网站的目标自然是为了赚钱,如果说你做网站是为了兴趣,我相信这个兴趣只会存在几个月,最多也就一年,如果你的网站在一年后还没有获得盈利,你对网站的兴趣可能因此就会下降,从而最终离开站长这个行业,可是如今 ...

  • Java编程中为了性能优化应做到的26件事

    操作方法 01 电脑内存爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了.下面南宁达内小编根据网络资源 ...

  • 免费网游加速 速游S模式献计

    利用免费网游的运营模式,速游(官网:http://www.ptsuyou.com) 成功成为业界鲜有的面向用户365*24小时完全免费的网游加速器。日前又刚刚发布行业的首个“给力跨区网游”---S模式 ...

  • OPPO工程模式怎么进

    注:提到的所有工程模式需从拨号盘输入 1."*#800#" OTA开关,系统更新时要打开OTA开关才能更新. 2."*#802#" TTFF:搜星测试,字面意思 ...

  • qq音乐播放模式在哪里设置?

    手机QQ怎么设置播放模式,如何切换QQ音乐为顺序播放.单曲播放.随机播放模式.QQ音乐升级到新版本后,在操作界面上也有所变动,有些基础设置功能不知道在哪个位置了,下面我来简单分享,新版QQ音乐如何切换 ...