博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-深入浅出之单例模式
阅读量:4164 次
发布时间:2019-05-26

本文共 1416 字,大约阅读时间需要 4 分钟。

二、设计模式之单例模式

2.1 饿汉模式

​ 饿汉模式就是在类加载的时候就将这个对象新建

​ 1.新建对象并且赋值

​ 2.新建私有的无参构造方法

​ 3.提供一个公共的静态方法来获取对象

public class SingletonHungry {
/** * JDK中Runtime类 饿汉方式 * * 类加载的时候就创建一个对象,比较占用内存 */ private static final SingletonHungry instance = new SingletonHungry(); /** * 私有构造方法 */ private SingletonHungry () {
} public static SingletonHungry getInstance() {
return instance; }}

2.2 懒汉模式

​ 懒汉模式就是在第一次需要对象的时候才会新建对象

​ 1.新建一个字段不赋值

​ 2.新建私有的无参构造方法

​ 3.提供一个公共的静态方法来获取对象

public class SingletonLazy {
/** * * 这是否安全,instance = new SingletonLazy(); 并不是原子性操作 * 1、分配空间给对象 * 2、在空间内创建对象 * 3、将对象赋值给引用instance * * 假如线程 1-》3-》2顺序,会把值写会主内存,其他线程就会读取到instance最新的值,但是这个是不完全的对象 * (指令重排) * * volatile是Java提供的关键字,它具有可见性和有序性, * * 指令重排序是JVM对语句执行的优化,只要语句间没有依赖,那JVM就有权对语句进行优化 */ private volatile static SingletonLazy instance; private SingletonLazy(){
} /** * DCL 双重检查锁定 (Double-Checked-Locking),在多线程情况下保持高性能 * */ public static SingletonLazy getInstance() {
// 第一重检查 if (instance != null) {
// 加锁 synchronized (SingletonLazy.class) {
// 第二重检查 if (instance != null) {
instance = new SingletonLazy(); } } } return instance; }}

转载地址:http://uexxi.baihongyu.com/

你可能感兴趣的文章
C++中引用计数、AddRef、Release
查看>>
《我不是药神》——生如夏花
查看>>
Linux中获取目录可用空间API
查看>>
C++程序员技术需求规划(发展方向)
查看>>
如何更高效地在IT职场中摸爬滚打
查看>>
libcurl使用时疑难问题【如:文件下载】
查看>>
【万圣狂欢夜】“状”神弄鬼,一起“妖”约
查看>>
Linux中Netlink实现热插拔监控——内核与用户空间通信
查看>>
Windows中使用socket实现网络编程
查看>>
跨平台方法(一):获取文件大小(参数为文件url)
查看>>
C++设计技巧(一)之两个类互相拥有对方的对象指针
查看>>
TCP/UDP的接收缓冲区和发送缓冲区
查看>>
C++类里面定义一个指向自己的静态成员指针变量(实现单例)
查看>>
LTE基本认识
查看>>
MQTT的实际应用
查看>>
TinyXml2解析xml用法例子
查看>>
Linux 虚拟内存和物理内存
查看>>
产品和技术,你选对了吗?
查看>>
使用libcurl遇到的坑
查看>>
UDP客户端发送结构体数据,调用recvfrom函数阻塞问题
查看>>