java 中单例_java 中单例实例
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 中单例实例相关推荐
- java中单例_Java中单例
Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍两种:懒汉式单例.饿汉式单例 单例模式有以下特点:1.单例类只能有一个实例.2.单例类必须自己创建自己的唯一实例.3.单例类 ...
- java类多例_Java多例设计模式实例详解
本文实例讲述了Java多例设计模式.分享给大家供大家参考,具体如下: 一.多例设计模式定义 多例设计模式就是存在多个对象实例,供外部应用裯用,比喻数据库连接池. 二.多例模式静态类图 三.多例模式代码 ...
- mongodb java 单例_JAVA单例MongoDB工具类详解
shasha 2018年09月07日 681 0 JAVA单例MongoDB工具类 JAVA驱动版本: org.mongodb mongo-java-driver 3.0.2 工具类代码如下: pac ...
- mongodb java 单例_Java单例MongoDB工具类
我经常对MongoDB进行一些基础操作,将这些常用操作合并到一个工具类中,方便自己开发使用. 没用Spring Data.Morphia等框架是为了减少学习.维护成本,另外自己直接JDBC方式的话可以 ...
- java 自定义正则表达式_java中正则表达式实例详解
Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * ...
- java clock计时_Java Clock类| 实例的Instant()方法
java clock计时 Clock Class Instant()方法 (Clock Class instant() method) instant() method is available in ...
- java异常例子_java 异常的实例详解
java 异常的实例详解 1.异常的定义:程序在运行时出现不正常情况. 异常的划分: Error:严重的问题,对于error一般不编写针对性的代码对其进行处理. Exception:非严重的问题,对于 ...
- java 反射 速度_Java反射获取实例的速度对比分析
之前代码有一个逻辑,是在初始化时读取某个包下的所有class文件,放入到一个HashMap里.代码运行过程中,通过Key获取到对应class的全路径名,最后通过Class.forName(classN ...
- java类初始化_Java的类/实例初始化过程
昨天看到群里面有人分享了一道题目,我答错了,于是趁机了解了下Java的类/对象初始化过程: 程序的输出见文章最后 程序A主要考察的是 类实例初始化 .简单验证了下,类实例初始化过程如下:父类实例初始化 ...
最新文章
- 杨元庆:兔子要变成狼靠的是体制的激励
- 神经网络架构演进史:全面回顾从LeNet5到ENet十余种架构
- 1.12 Java空对象(null)是怎么回事?
- 算法--2016搜狐面试:搜狐员工放假了,都玩什么?
- NAT的extendable参数,使得一个地址被不同接口NAT出去测试
- 软件工程专业(互联网应用开发与优化方向)软件工程实践二环节教学大纲
- matlab中nlfilter函数,matlab的一些关于块分类的函数~~~
- 统计数字字符个数(信息学奥赛一本通-T1129)
- 使用recyclerView实现无限循环banner效果
- torch.index_select与torch.gather
- anaconda查看删除增加镜像源
- 金山词霸 只能最大最小
- spring boot2整合dubbox全注解
- 单片机百位计数c语言,单片机c语言版数管动态显示实验报告.doc
- android平台db4o使用示例
- C语言2--进制和运算符
- GeeM2传奇引擎进入游戏出现白屏的解决办法
- linux发挥显卡性能,Sandy Bridge集成显卡总算支持Linux 开源性能实测
- CSDN产品周报第17期|首页推荐流支持快捷修改兴趣标签,问答支持展示gif
- Flutter 淘宝 App,支持 iOS、Android
热门文章
- excel拼接sql
- 终于把整个Seafile服务器手册过了一遍,竟然一天就做完了,刺客感觉自己特别伟大!
- 历届蓝桥杯青少年Scratch编程选拔赛 STEMA评测比赛真题解析【持续更新 已更新至49题】
- 深度学习 | (4) 分类问题的Label为啥是one-hot?
- 使用开源代码实现二维码扫描和生成
- 夽谷科技亮相2021华南(广州)智能装备大会及装备数字化展览会
- JQuery攻略(四)事件
- C#中GridView控件的使用
- linux基础第8节 ----配置与管理FTP服务器
- https://bbs.csdn.net/topics/60370072