我经常遇到一些这样的Java程序员,他们不确定应该如何恰当的实现单例模式。

我不考虑在线程的环境中合适的实现。但是使用你能在网络上找到的大多数常见的实现方式,你可以轻松地创建你想要的多种单例实现。

假设你有下面这种常见的单例的实现:

1 public final class NonSafeSingleton implements Serializable {
2     private static final NonSafeSingleton INSTANCE = new NonSafeSingleton();
3     private NonSafeSingleton() {}
4     public static NonSafeSingleton getInstance() {
5         return INSTANCE;
6     }
7 }

现在,注意到Serializable 这个单词。思考一会…..你是对的。如果通过RMI发送上边的代码,你将会得到第二个实例。它应该足够可以做一些内存中的序列化和反序列化操作。你刚刚违反了单例的规则。那不是很好。但是如何修复它?通常我会用两种方式:

  1. 困难的方式(如果你用4或者更老的版本)

你需要在你的单例类中实现一个readResolve方法。这通常用来重写序列化机制已经创建的内容。在这个方法里返回的是用来代替来自序列化的数据。这里仅需要返回你的实例:

1 ...  
2 protected Object readResolve() throws ObjectStreamException {      
3    return INSTANCE;  
4 }
5 ...

  1. 简单的方式(如果你用5或更新的版本)

将你的单例类改成枚举类型,然后移除私有构造方法和getInstance方法。下面,真的很简单。然后你将免费得到下面这个:

1 public enum SafeSingleton implements Serializable {
2    INSTANCE;
3 }

当你再实现单例模式时,记住这些。如果你大量的使用RMI,它可以使你的生活更加简单。

Reference: The Perfect Singleton from our JCG partner Marek Piechut at the Development world stories.

Related Articles :

  • The dreaded double checked locking idiom in Java
  • Java Secret: Using an enum to build a State machine
  • Dependency Injection – The manual way
  • Java Generics Quick Tutorial
  • How does JVM handle locks
  • 转载自 并发编程网 - ifeve.com

完美的单例实现(The Perfect Singleton)相关推荐

  1. java 单例 并发_完美的单例实现(The Perfect Singleton)

    原文链接  作者:Marek Piechut    译者:陈振阳 我经常遇到一些这样的Java程序员,他们不确定应该如何恰当的实现单例模式. 我不考虑在线程的环境中合适的实现.但是使用你能在网络上找到 ...

  2. 单例设计模式singleton

    简单引入 单例设计模式作为最简单,最常用的设计模式.一般是这两中写法,这两种写法教科书所谓的标准写法,但是实际上存在不少问题.后面介绍标准写法,以规避这些问题. 1.懒汉式: /*** 问题在于,当多 ...

  3. [转载] Java 单例(Singleton)类

    参考链接: Java中的Singleton/单例类 参考资料 [1]. 疯狂Java讲义(第三版) 李刚 单例(Singleton)类 虽然Java 系统允许,但是类成员还是不要访问实例成员.  如果 ...

  4. 大叔手记(10):别再让面试官问你单例

    大叔手记(10):别再让面试官问你单例(暨6种实现方式让你堵住面试官的嘴) ... 2012-2-19 09:03| 发布者: benben| 查看: 283| 评论: 0 摘要: 引子经常从Recr ...

  5. 【设计模式】-创造篇-单例

    单例定义 单例模式(Singleton)是一种非常简单且容易理解的设计模式.顾名思义,单例即单一的实例,确切地讲就是指在某个系统中只存在一个实例,同时提供集中.统一的访问接口,以使系统行为保持协调一致 ...

  6. 【设计模式的开始,设计原则+单例】

    前言 每周一更,这周开始和大家一起学习设计模式. 谈谈设计原则 设计原则是很重要的一个东西,大厦之于地基,它是我们编码要牢记在心的一个东西. 单一职责原则 单一职责指的是一个接口只干一件事情嘛?显然这 ...

  7. java中的单例_细说Java中的几种单例模式

    在Java中,单例模式分为很多种,本人所了解的单例模式有以下几种,如有不全还请大家留言指点: 饿汉式 懒汉式/Double check(双重检索) 静态内部类 枚举单例 一.饿汉式 image 饿汉式 ...

  8. 菜鸟学设计模式——小单例有大秘密

    欢迎大家关注我的新书<Spring Boot趣味实战课> 京东 当当 天猫 单例模式大家并不陌生,也都知道它分为什么懒汉式.饿汉式之类的.但是你对单例模式的理解足够透彻吗?今天我带大家一起 ...

  9. 深入理解单例模式:静态内部类单例原理

    本文主要介绍java的单例模式,以及详细剖析静态内部类之所以能够实现单例的原理.OK,废话不多说,进入正文. 首先我们要先了解下单例的四大原则: 1.构造私有. 2.以静态方法或者枚举返回实例. 3. ...

最新文章

  1. 关于BERT,面试官们都怎么问
  2. 按钮开始多线程_微软MR技术专家分享:AR/VR多线程处理的八年经验与技巧
  3. koa --- 使用koa-multer上传文件+elementUI
  4. 如何点击打印,直接打印出来,不弹打印设置选项
  5. 营销获客场景下的个人类业务要件分析
  6. 吊炸天!一行命令快速部署大规模K8S集群!!!
  7. Ubuntu学习日记--Lesson9:显卡工作状态查看命令
  8. 凸优化第九章无约束优化 9.4 最速下降方法
  9. Linux终端控制台console和earlycon分析
  10. 【排列组合】只上代码不解释
  11. linux tensorflow例子,基于Docker的TensorFlow机器学习框架搭建和实例源码解读
  12. Eclipse配置android开发环境详解
  13. Intel FPGA的JESD204B例程的搭建
  14. LaTex(PART IV) 各级标题
  15. 手机开机启动慢是什么原因_手机开机的速度太慢怎么办
  16. TokenInsight 对话首席——加密通证期货世界,究竟是投机还是金融工具?
  17. html5 在线 ppt 制作软件,HTML5 幻灯片相册制作工具(HTML5 Slideshow Maker)
  18. Docker自定义镜像上传阿里云
  19. C++ bind2nd用法
  20. ubuntu18.04上的draftsight 2D的安装

热门文章

  1. JAVA基础知识要点
  2. js按位运算符及其妙用
  3. 抽象类和接口有什么区别?
  4. Spring Boot 入门例子 Hello world - TerryHe 博客园
  5. Openjudge-NOI题库-和为给定数
  6. win 文字转化为语音
  7. memcpy实例(一)
  8. 尝试在centos5下运行phantomjs2
  9. vc编程中出现 fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h”?...
  10. 关于fckEditor的功能配置-PHP版