1、懒汉模式

/**

* 懒汉模式 -》 双重同步锁单例模式

* 单例实例在第一次使用时进行创建

*/

public class SingletonExample5 {

// 私有构造函数

private SingletonExample5() {

}

// 1、memory = allocate() 分配对象的内存空间

// 2、ctorInstance() 初始化对象

// 3、instance = memory 设置instance指向刚分配的内存

// JVM和cpu优化,发生了指令重排

// 1、memory = allocate() 分配对象的内存空间

// 3、instance = memory 设置instance指向刚分配的内存

// 2、ctorInstance() 初始化对象

// 单例对象 volatile + 双重检测机制 -> 禁止指令重排

private volatile static SingletonExample5 instance = null;

// 静态的工厂方法

public static SingletonExample5 getInstance() {

if (instance == null) { // 双重检测机制 // B

synchronized (SingletonExample5.class) { // 同步锁

if (instance == null) {

instance = new SingletonExample5(); // A - 3

}

}

}

return instance;

}

}

2、饿汉模式

/**

* 饿汉模式

* 单例实例在类装载时进行创建

*/

public class SingletonExample6 {

// 私有构造函数

private SingletonExample6() {

}

// 单例对象

private static SingletonExample6 instance = null;

static {

instance = new SingletonExample6();

}

// 静态的工厂方法

public static SingletonExample6 getInstance() {

return instance;

}

public static void main(String[] args) {

System.out.println(getInstance().hashCode());

System.out.println(getInstance().hashCode());

}

}

3、枚举模式

/**

* 枚举模式:最安全

*/

public class SingletonExample7 {

// 私有构造函数

private SingletonExample7() {

}

public static SingletonExample7 getInstance() {

return Singleton.INSTANCE.getInstance();

}

private enum Singleton {

INSTANCE;

private SingletonExample7 singleton;

// JVM保证这个方法绝对只调用一次

Singleton() {

singleton = new SingletonExample7();

}

public SingletonExample7 getInstance() {

return singleton;

}

}

}

java 中单例_java 中单例实例相关推荐

  1. java中单例_Java中单例

    Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍两种:懒汉式单例.饿汉式单例 单例模式有以下特点:1.单例类只能有一个实例.2.单例类必须自己创建自己的唯一实例.3.单例类 ...

  2. java类多例_Java多例设计模式实例详解

    本文实例讲述了Java多例设计模式.分享给大家供大家参考,具体如下: 一.多例设计模式定义 多例设计模式就是存在多个对象实例,供外部应用裯用,比喻数据库连接池. 二.多例模式静态类图 三.多例模式代码 ...

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

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

  4. mongodb java 单例_Java单例MongoDB工具类

    我经常对MongoDB进行一些基础操作,将这些常用操作合并到一个工具类中,方便自己开发使用. 没用Spring Data.Morphia等框架是为了减少学习.维护成本,另外自己直接JDBC方式的话可以 ...

  5. java 自定义正则表达式_java中正则表达式实例详解

    Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * ...

  6. java clock计时_Java Clock类| 实例的Instant()方法

    java clock计时 Clock Class Instant()方法 (Clock Class instant() method) instant() method is available in ...

  7. java异常例子_java 异常的实例详解

    java 异常的实例详解 1.异常的定义:程序在运行时出现不正常情况. 异常的划分: Error:严重的问题,对于error一般不编写针对性的代码对其进行处理. Exception:非严重的问题,对于 ...

  8. java 反射 速度_Java反射获取实例的速度对比分析

    之前代码有一个逻辑,是在初始化时读取某个包下的所有class文件,放入到一个HashMap里.代码运行过程中,通过Key获取到对应class的全路径名,最后通过Class.forName(classN ...

  9. java类初始化_Java的类/实例初始化过程

    昨天看到群里面有人分享了一道题目,我答错了,于是趁机了解了下Java的类/对象初始化过程: 程序的输出见文章最后 程序A主要考察的是 类实例初始化 .简单验证了下,类实例初始化过程如下:父类实例初始化 ...

最新文章

  1. 杨元庆:兔子要变成狼靠的是体制的激励
  2. 神经网络架构演进史:全面回顾从LeNet5到ENet十余种架构
  3. 1.12 Java空对象(null)是怎么回事?
  4. 算法--2016搜狐面试:搜狐员工放假了,都玩什么?
  5. NAT的extendable参数,使得一个地址被不同接口NAT出去测试
  6. 软件工程专业(互联网应用开发与优化方向)软件工程实践二环节教学大纲
  7. matlab中nlfilter函数,matlab的一些关于块分类的函数~~~
  8. 统计数字字符个数(信息学奥赛一本通-T1129)
  9. 使用recyclerView实现无限循环banner效果
  10. torch.index_select与torch.gather
  11. anaconda查看删除增加镜像源
  12. 金山词霸 只能最大最小
  13. spring boot2整合dubbox全注解
  14. 单片机百位计数c语言,单片机c语言版数管动态显示实验报告.doc
  15. android平台db4o使用示例
  16. C语言2--进制和运算符
  17. GeeM2传奇引擎进入游戏出现白屏的解决办法
  18. linux发挥显卡性能,Sandy Bridge集成显卡总算支持Linux 开源性能实测
  19. CSDN产品周报第17期|首页推荐流支持快捷修改兴趣标签,问答支持展示gif
  20. Flutter 淘宝 App,支持 iOS、Android

热门文章

  1. excel拼接sql
  2. 终于把整个Seafile服务器手册过了一遍,竟然一天就做完了,刺客感觉自己特别伟大!
  3. 历届蓝桥杯青少年Scratch编程选拔赛 STEMA评测比赛真题解析【持续更新 已更新至49题】
  4. 深度学习 | (4) 分类问题的Label为啥是one-hot?
  5. 使用开源代码实现二维码扫描和生成
  6. 夽谷科技亮相2021华南(广州)智能装备大会及装备数字化展览会
  7. JQuery攻略(四)事件
  8. C#中GridView控件的使用
  9. linux基础第8节 ----配置与管理FTP服务器
  10. https://bbs.csdn.net/topics/60370072