1,单例模式的要素

1)私有构造方法。

2)public static synchronized的getInstance()方法。

上述2个要素虽然可以保证单例模式的实现,但并不是最好的方式。因为当我们讨论性能时,synchronized方法有着非常昂贵的代价。

2,多线程使用环境下的线程安全实现方式

a)使用double locking机制的懒初始化。代码如下。在这种情况下,当调用getInstance方法时,才会创建单例对象。

b)使用静态属性的早初始化。代码如下。下面的实现方式,当类被加载时,单例对象就会创建。因为单例对象是静态的。类只会被加载一次,保证了单例对象的唯一性。

3,protected 的构造函数

有时候,为了能够继承单例类,我们可以使用protected的构造函数。但是,这样会有2个缺点,让单例继承不实用。

第一点,如果构造函数是protected的,这意味着单例类可以被相同包下另一个类通过调用构造函数的方式来创建。一个可以避免这种情况的解决方法是,把单例类放在一个单独的包里。

第二点,为了能够使用继承类,代码中所有已经调用Singleton.getInstance方法的地方,都需要修改为DerivedSingleton.getInstance方法。

4,使用不同类加载器的情景

如果一个类被2个类加载器加载了,那么,在内存里,它们是2个不同的类。

5,序列化

如果一个单例类实现了Serializable接口,当单例序列化,然后多次反序列化时,将会有多个对象被创建。

热点:

多线程:如果单例需要在多线程环境下使用,应该要特别留心。

序列化:当单例类实现了Serializable接口时,它必须重写readResolve方法来避免出现2个对象。

类加载器:如果单例类被2个不同的类加载器加载,那么我们会有2个不同的类,一个类加载器会有一个类。

通过类目进行全局访问:单例对象是通过类名获取的。初看起来,这是一个访问它的很简单的方式,但却不是很灵活。如果我们需要替换单例类,那么代码中所有引用的地方都需要修改。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对聚米学院的支持。如果你想了解更多相关内容请查看下面相关链接

java 单例继承,Java单例模式的讲解相关推荐

  1. java 单例 构造函数,Java单例模式学习

    1.单例模式要点及实现角度 要点:一是某个类只能有一个实例: 二是它必须自行创建这个实例: 三是它必须自行向整个系统提供这个实例. 从具体实现角度来说,就是以下三点: 一是单例模式的类只提供私有的构造 ...

  2. java 单例方法,java单例模式使用及注意事项

    1. 说明 1)单例模式:确保一个类只有一个实例,自行实例化并向系统提供这个实例 2)单例模式分类:饿单例模式(类加载时实例化一个对象给自己的引用),懒单例模式(调用取得实例的方法如getInstan ...

  3. java 单例 dcl_java 中单例模式DCL的缺陷及单例的正确写法

    1 前言 单例模式是我们经常使用的一种模式,一般来说很多资料都建议我们写成如下的模式: /** * Created by qiyei2015 on 2017/5/13. */ public class ...

  4. java 单例写法_java 单例模式的几种写法

    一.懒汉式 public classSingleton{private static Singleton instance = null;privateSingleton(){}public stat ...

  5. java单例方法_Java单例模式

    单例模式,是特别常见的一种设计模式,因此我们有必要对它的概念和几种常见的写法非常了解,而且这也是面试中常问的知识点. 所谓单例模式,就是所有的请求都用一个对象来处理,如我们常用的Spring默认就是单 ...

  6. java单例设计模式_Java设计模式之单例模式详解

    在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...

  7. java设计模式 单例_java设计模式--单例模式

    单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点. 核心知识点如下: (1) 将采用单例 ...

  8. Java单例的常见形式

    2019独角兽企业重金招聘Python工程师标准>>> Java单例的常见形式 本文目的:总结Java中的单例模式 本文定位:学习笔记 学习过程记录,加深理解,便于回顾.也希望能给学 ...

  9. mongodb java 单例_JAVA单例MongoDB工具类详解

    shasha 2018年09月07日 681 0 JAVA单例MongoDB工具类 JAVA驱动版本: org.mongodb mongo-java-driver 3.0.2 工具类代码如下: pac ...

最新文章

  1. 谷歌发布史上最强人类大脑「地图」,1.3亿个突触,在线可视3D神经元「森林」!...
  2. 如何制作启动盘安装ubuntu系统
  3. 浅析搜索引擎对网站的抓取规则有哪些方面
  4. 154 Find Minimum in Rotated Sorted Array 2
  5. php开发微信支付获取用户地址
  6. how to become a good teacher
  7. gis 大屏_gis大屏可视化应用技术方案_gis大屏可视化应用技术_gis大屏可视化应用 - 帆软...
  8. android 实现显示电量,Android开发:显示电池电量
  9. 蓝桥杯第八届省赛JAVA真题----拉马车
  10. android手机连接windows,将Android手机投影到Windows 10 PC [夏昆冈]
  11. 赛锐信息:优化SAP系统运行时的建议
  12. 【数据结构笔记43】C实现:寻找通话次数最多的电话号(散列表例题)
  13. 恒生电子笔试题集锦(不断更新)
  14. 计算机基础考试在线搜题,计算机基础考试题库 (含答案).doc
  15. xlsxwriter去掉网格线_xlsxwriter图表网格间距
  16. 不要质疑读者,读者永远比作者聪明
  17. 越南旅游攻略??转载
  18. 云计算 | Gartner最新IaaS魔力象限详读
  19. 三屏指挥调调度终端/三屏计算机/一机三屏指挥调度/三屏融合指挥调度
  20. IDEA MyBatis 报错:Could not find resource com/xxx/xxxMapper.xml

热门文章

  1. 韩国画师作品,超精细的韩风人物插画
  2. virtuoso安装
  3. 展锐平台 取消蓝牙配对码弹框
  4. 初学者该如何快速入门Python?内附十年Python大老详细学习攻略
  5. 让手机支持OTG,不看绝对后悔! - 我也做一回搬运工,解决RFID读卡器OTG支持问题...
  6. Java中让浮点型数据保留两位小数的四种方法
  7. idea 浏览器图标消失 html页面看不到浏览器打开的图标
  8. mongodb下载太慢怎么办?
  9. 爬虫小工具——Curl转python在线工具
  10. AutoMapper运行时通过IMappingOperationOptions映射控制