饿汉式

线程安全,调用效率高,但是不能延时加载。

public class Singleton {private static Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance(){return instance;}
}

懒汉式

调用效率不高,但是能延时加载。

如果方法没有 synchronized,单例没有 volatile , 则线程不安全。

public class Singleton {private static Singleton instance = null;private Singleton(){}public static synchronized Singleton getInstance(){if(instance == null) {instance = new Singleton();}return instance;}
}

懒汉式改良

线程安全,使用了 double-check-lock(双重检查锁),即check-lock-check,目的是为了减少同步的开销。

volatile关键字来修饰 instance,其最关键的作用是防止指令重排。

public class Singleton {private volatile static Singleton instance = null;private Singleton() {}public static Singleton getInstance() {if(instance == null) {synchronized (Singleton.class) {if(instance == null) {instance = new Singleton();}}}return instance;}
}

静态内部类实现

线程安全,调用效率高,可以延时加载。静态内部类不会在 Singleton 类加载时就加载,而是在调用 getInstance() 方法时才进行加载,达到了懒加载的效果。

public class Singleton {private Singleton() {}public static Singleton getInstance(){return SingletonFactory.singletonInstance;}private static class SingletonFactory{private static Singleton singletonInstance = new Singleton();}
}

枚举实现

线程安全,调用效率高,不能延时加载,可以天然的防止反射反序列化调用。

public enum Singleton {INSTANCE;private String instance;Singleton() {instance = new String("singleton");}public String getInstance(){return instance;}
}

Java 单例模式实现相关推荐

  1. Java单例模式个人总结(实例变量和类变量)

    Java单例模式 背景知识:Static关键字. 在对于定义类的变量,分为两种,是否具有static修饰的变量: 没有static修饰的变量,通过类的实例化(对象)引用,改变量称为实例变量: 使用st ...

  2. Java 单例模式探讨

    以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...

  3. Java单例模式优化写法

    转载自 http://blog.csdn.net/diweikang/article/details/51354982 Java单例模式优化写法 方法一:推荐 [java] view plain co ...

  4. Java单例模式的几种实现方式

    Java单例模式的几种实现方式 在Java 中,单例类只能有一个实例,必须创建自己的唯一实例,单例类必须给所有其他对象提供这一实例.Java 单例模式有很多种实现方式,在这里给大家介绍单例模式其中的几 ...

  5. Java 单例模式:懒加载(延迟加载)和即时加载

    Java 单例模式:懒加载(延迟加载)和即时加载 引言 在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制(或懒加载.延时加载),也就是说只有当使用到这个实例的时候才会创 ...

  6. Java单例模式:为什么我强烈推荐你用枚举来实现单例模式

    写在前面--原作的这篇文章真的写的非常的简洁,逻辑清晰,将Java单例模式的各种写法写的非常清楚,并介绍了用枚举实现单例的最佳实践. 单例模式简介 单例模式是 Java 中最简单,也是最基础,最常用的 ...

  7. java单例模式 三种_三种java单例模式概述

    在java语言的应用程序中,一个类Class只有一个实例存在,这是由java单例模式实现的.Java单例模式是一种常用的软件设计模式,java单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种.下 ...

  8. 什么是java单例模式?

    关于java单例模式的文章早已是非常多了,本文是对我个人过往学习java,理解及应用java单例模式的一个总结.此文内容涉及java单例模式的基本概念,以及什单例模式的优缺点,希望对大家有所帮助. 什 ...

  9. 比心app源码,Java 单例模式

    比心app源码,Java 单例模式实现的相关代码 概述:单例模式是指在内存中永远只有一个类的实例. 有利于节约内存和保证共享计算的结果正确,方便管理. 单例模式的形式 饿汉式单例:在获取单例对象之前对 ...

  10. Java单例模式及开发应用场景

    一.Java单例模式是什么? 所谓单例,指的就是单实例,有且仅有一个类实例,这个单例不应该由人来控制,而应该由代码来限制,强制单例. 二.为什么要用单例模式? 单例有其独有的使用场景,一般是对于那些业 ...

最新文章

  1. linux test数字txt,Linux26期 7月4日预习笔记
  2. OpenCV新手入门,如何用它平移缩放和旋转图片
  3. Java功底之Reference
  4. 税务审计SAP需要用表
  5. u盘读写测试_关于闪迪u盘cz880速度测试
  6. 如何成为一位数据科学家(图灵访谈)
  7. 200行代码实现视频人物实时去除
  8. sklearn之Multioutput 估计器
  9. STM32工作笔记0022---STM32F1开发版 GPIO口工作原理
  10. 舒尔特表-最终版 js
  11. 已删除的QQ好友聊天记录怎么查看
  12. 总结js实现字符串转JSON对象的几种方法
  13. oracle数据库技术_创建 pdb数据库
  14. 计网习题总结,附答案
  15. 数字化时代,如何提高企业的交易管理效率?
  16. opencv将16位灰度图片转化为8位
  17. win12 修改dns脚本
  18. VISIO无法插入到word,ppt中
  19. 多目标优化算法:多目标变色龙群优化算法MOCSA(提供MATLAB源码)
  20. Android GMS Checklist【Android gms认证自检表】

热门文章

  1. 谷歌翻译软件-大家都在下载的谷歌翻译软件
  2. 【题】【贪心】NKOJ3827 火车运输
  3. GET,POST和PUT的区别
  4. 1、python冒泡排序和快排
  5. 复现Oriented R-CNN RTX 2080Ti
  6. 五洲制冷中央空调西门子S7-200 PLC控制系统程序 PLC和屏程序
  7. 2021年2月16日 星期二 农历初五 晴 天津
  8. [GXOI/GZOI2019]逼死强迫症
  9. 用ul制作html表单,要利用 display属性把段落P、标题h1、表单form、列表ul和li都可以定义成行内块元素,其属性值为...
  10. 线段树(区间修改)模板题 Luogu 2357 守墓人