七种写法的单列模式
时间:2019-03-25
本文章向大家介绍七种写法的单列模式,主要包括七种写法的单列模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目录
七种写法的单列模式
版本1:饿汉式
public class SingletonObject1 {
private static final SingletonObject1 instance = new SingletonObject1();
private SingletonObject1() {
}
public static SingletonObject1 getInstance() {
return instance;
}
}
版本2:多线程可能导致多个实例
/**
多线程可能导致多个实例
*/
public class SingletonObject2 {
private static SingletonObject2 instance;
private SingletonObject2(){}
public static SingletonObject2 getInstance() {
if (null == instance){
instance = new SingletonObject2();
}
return instance;
}
}
版本3:效率有待优化
/**
将整个方法锁住,效率有待优化
*/
public class SingletonObject3 {
private static SingletonObject3 instance;
private SingletonObject3(){}
public synchronized static SingletonObject3 getInstance() {
if (null == instance){
instance = new SingletonObject3();
}
return instance;
}
}
版本4:Double Check可能出现空指针异常
/**
* Double Check
* 可能会导致空指针异常:
*/
public class SingletonObject4 {
private static SingletonObject4 instance;
private SingletonObject4(){}
public static SingletonObject4 getInstance() {
if (null == instance){
synchronized (SingletonObject4.class){
if (null == instance) {
instance = new SingletonObject4();
}
}
}
return instance;
}
}
版本5:Double Check
public class SingletonObject5 {
//volatile 保证读的过程,写必须完成,
// 也就new SingletonObject5的时候里面的内容全部构造完成
private volatile static SingletonObject5 instance;
private SingletonObject5(){}
public static SingletonObject5 getInstance() {
if (null == instance){
synchronized (SingletonObject5.class){
if (null == instance) { //这里一定需要再次判断
instance = new SingletonObject5();
}
}
}
return instance;
}
}
版本6:通过静态内部类构造
public class SingletonObject6 {
private SingletonObject6() {}
private static class InstanceHolder {
private final static SingletonObject6 instance = new SingletonObject6();
}
public static SingletonObject6 getInstance() {
return InstanceHolder.instance;
}
}
版本7:通过枚举构造
public class SingletonObject7 {
private SingletonObject7(){ }
private enum Singleton {
INSTANCE;
private final SingletonObject7 instance;
Singleton() {
instance = new SingletonObject7();
}
public SingletonObject7 getInstance() {
return instance;
}
}
public static SingletonObject7 getInstance() {
return Singleton.INSTANCE.getInstance();
}
}
- 遗传算法(2)
- 算法模板——线性筛素数
- HDU 3480 Division
- 小白博客 Xiaobai___详细教你如何在Linux环境下安装mysql数据库
- 3856: Monster
- BZOJ4753: [Jsoi2016]最佳团体
- 3101: N皇后
- 算法模板——线性欧拉函数
- jdbc基础 (一) MySQL的简单使用
- 小白博客 爆破内网mysql数据库root密码脚本代码
- 2818: Gcd
- 1688: [Usaco2005 Open]Disease Manangement 疾病管理
- 通过MySQL自动同步刷新Redis
- 13.MySQL(一) 数据库简介mysql安装数据库操作Mysql数据类型存储引擎
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- c语言调用go封装的动态库步骤及减小体积包的方法
- 深入理解JavaScript闭包之闭包的使用场景
- Spring Boot 到底是个啥?
- Spring Boot 整合 Thymeleaf
- webapp打包为Android的apk包的一种方法
- Android应用之Hybird混合开发,集成web页面的方法尝试
- Spring Boot 通过 XML 的方式整合 MyBatis
- layUI登录界面验证码功能模块儿封装
- go语言微信公众号开发后台接口封装
- 【DB宝14】在Docker中只需2步即可拥有Oracle 11g企业版环境(11.2.0.4)
- 别忘了给gcc编译器工具链加上-fno-common选项
- 轻量安全的部署方案
- 算法集锦(34) | 强化学习| 出租车载客问题
- 前端测试题:(解析)关于ajax跨域的说法,下面错误的是?
- 什么才是定制化 IDE 的核心价值?