设计模式---单例模式

本文探讨了设计模式中的单例模式,包括饿汉模式和懒汉模式的实现。饿汉模式在类加载时即创建实例,确保线程安全但占用更多空间;懒汉模式在首次使用时创建实例,节省空间但可能带来线程安全问题。为解决懒汉模式的线程安全,文章介绍了使用`synchronized`关键字和双重检查加锁的策略,以及`volatile`关键字的作用。
摘要由CSDN通过智能技术生成

定义:作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。单例模式分成饿汉模式和懒汉模式。

饿汉模式代码如下:
这里写图片描述

懒汉模式代码如下:
这里写图片描述

饿汉模式与懒汉模式的区别:
饿汉式是典型的空间换时间,当类装载的时候就会创建类的实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要再判断,节省了运行时间。线程安全
懒汉式是典型的时间换空间,就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间。线程不安全

怎么实现线程安全的懒汉模式呢?
1.使用synchronized
2.双重检查加锁
所谓“双重检查加锁”机制,指的是:并不是每次进入getInstance方法都需要同步,而是先不同步,进入方法后,先检查实例是否存在,如果不存在才进行下面的同步块,这是第一重检查,进入同步块过后,再次检查实例是否存在,如果不存在,就在同步的情况下创建一个实例,这是第二重检查。这样一来,就只需要同步一次了,从而减少了多次在同步情况下进行判断所浪费的时间。如下:

这里写图片描述
“双重检查加锁”机制的实现会使用关键字volatile,它的意思是:被volatile修饰的变量的值,将不会被本地线程缓存,所有对该变量的读写都是直接操作共享内存,从而确保多个线程能正确的处理该变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值