java单例模式几种常见实现方式
什么是单例模式
因进程需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。单例模式的特点
1、单例模式只能有一个实例。
2、单例类必须创建自己的唯一实例
3、单例类必须向其他对象提供这一实例。单例模式的实现
- 懒汉式(线程不安全)
public class SingletonDemo {private static SingletonDemo instance;private SingletonDemo(){}public static SingletonDemo getInstance(){if(instance==null){instance=new SingletonDemo();}return instance;} }
- 懒汉式,线程安全
public class SingletonDemo {private static SingletonDemo instance;private SingletonDemo(){}public static synchronized SingletonDemo getInstance(){if(instance==null){instance=new SingletonDemo();}return instance;} }
这种模式在多线程的时候效率比较低,生产上不推荐.
- 饿汉式,线程安全
public class SingletonDemo {private static SingletonDemo instance=new SingletonDemo();private SingletonDemo(){}public static SingletonDemo getInstance(){return instance;} }
- 静态内部类(线程安全)
public class SingletonDemo {private static class SingletonHolder{private static SingletonDemo instance=new SingletonDemo();}private SingletonDemo(){System.out.println("Singleton has loaded");}public static SingletonDemo getInstance(){return SingletonHolder.instance;} }
- 枚举方法(线程安全)
enum SingletonDemo{INSTANCE;public void otherMethods(){System.out.println("Something");} }
- 双重校验(线程安全)
public class SingletonDemo {private static SingletonDemo instance;private SingletonDemo(){System.out.println("Singleton has loaded");}public static SingletonDemo getInstance(){if(instance==null){synchronized (SingletonDemo.class){if(instance==null){instance=new SingletonDemo();}}}return instance;} }
java单例模式几种常见实现方式相关推荐
- Java swing五种常见的布局方式【转载】
Java swing五种常见的布局方式 1. 边界布局(BorderLayout) 2.流式布局(FlowLayout) 3.网格布局(GridLayout) 4.盒子布局(BoxLaYout) 5. ...
- MySQL 异常:这一篇就够了,MySQL 抛出异常的几种常见解决方式小结
Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connectio ...
- java布尔类型比较器_浅谈Java中几种常见的比较器的实现方法
在java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题. 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象.这种方式可以直接使用& ...
- Java中 9 种常见的 CMS GC 问题分析与解决
目录 Java中 9 种常见的 CMS GC 问题分析与解决 1. GC 1.1 引言 1.2 概览 2. GC 基础 2.1 基础概念 2.2 JVM 内存划分 2.3 分配对象 2.4 收集对象 ...
- Java有几种文件拷贝方式?哪一种最高效?
第12讲 | Java有几种文件拷贝方式?哪一种最高效? 我在专栏上一讲提到,NIO 不止是多路复用,NIO 2 也不只是异步 IO,今天我们来看看 Java IO 体系中,其他不可忽略的部分. 今天 ...
- Java的几种常见接口用法
2019独角兽企业重金招聘Python工程师标准>>> Java的几种常见接口用法 今天在看阎宏的< Java与模式>,里面对 java的 几种 接口的常用方法的总结: ...
- java中几种创建对象的方式
java中几种创建对象的方式 在java程序中,对象可以被显式地或者隐式地创建. 下面说说四种显式的创建对象的方式: ● 用new语句创建对象 ● 运用反射手段,调用java.la ...
- Java中两种抛出异常的方式
Java中两种抛出异常的方式 在Java中有两种抛出异常的方式,一种是throw,直接抛出异常,另一种是throws,间接抛出异常. 直接抛出异常是在方法中用关键字throw引发明确的异常.当thro ...
- java单例模式 三种_三种java单例模式概述
在java语言的应用程序中,一个类Class只有一个实例存在,这是由java单例模式实现的.Java单例模式是一种常用的软件设计模式,java单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种.下 ...
最新文章
- 如何用PyTorch进行语义分割?
- VSFTPD的虚拟用户管理配置
- 看一下操作闪电网络最大的节点是什么感觉
- 中国量子通信再获突破,潘建伟团队完成人类首次洲际量子通信
- Android 动画 介绍与使用
- Python的可变类型与不可变类型
- C++中如何定义动态数组
- 五、规则组织的衍生组织——纬山形组织数学模型的建立
- 常用的作业调度算法应用练习
- 数据结构学习笔记:实现链表
- 传统人工势场法---经典算法
- Flutter TextFiled去掉下划线
- mysql 按照年龄段分组查询
- 在没有ftp上传软件时怎么上传
- IDEA上tomcat日志输出乱码 淇℃伅 鏈嶅姟鍣ㄧ増鏈彿(锛 解决办法
- 流星加速器木马分析与处置方案
- zoj 1005 Jugs BFS
- 黄冈师范学院计算机科学与技术学院,黄冈师范学院 计算机科学与技术学院 刘小俊老师简介 联系方式 手机电话 邮箱...
- 阿里云 ACP 认证,分享下经验心得
- 20189220 余超《Linux内核原理与分析》第三周作业
热门文章
- CVPR 2021 审稿意见出了,你也许需要这份学术论文投稿与返修指南
- ubuntu vi/vim退出文件
- Unity打包apk报错: Cannot fit requested classes in a single dex file (# methods: 73376 > 65536)的解决办法
- 基础语法(整型:uint、uint8、uint16、uint32、uint64、uintptr)
- RecyclerView添加头部
- JS中[].slice.call的理解
- 【MySQL作业】分组查询 group by 子句——美和易思分组查询应用习题
- 【Error】解决ubuntu 18.04 dns故障
- 数据集市是什么?数据集市和数据仓库有什么区别
- 大数据分析的技术有哪些?