Java 单例模式

单例模式概念:
      确保一个类只有一个实例化对象,并且提供一个可以被全局访问的对象(被共享)


单例模式应用场景:
      不希望频繁的创建和销毁对象,带来系统资源的浪费,比如数据库对象或者单例的bean


实现步骤:
1.设置静态成员变量
2.构造器私有化,不让外部创建实例
3.提供静态getter方法,外部获取唯一实例

单例模式常见的有懒汉式单例模式和饿汉式单例模式


懒汉式单例模式也叫延迟加载,就是在调用getter方法的时候创建单例,但是在多线程的条件下会出现线程不安全的问题
有两种方式解决
1.使用synchronized修饰getter方法保证线程同步
2.懒加载使用线程同步会造成性能下降,因为我们只是希望在第一次创建实例的时候加锁
所以就使用了volatile修饰成员变量为线程可见,然后使用双重机制进行两次判空
第一次判空是提高性能,为空的前提下才加锁,第二次判空是为了保证只创建一个实例,保证线程同步
既提高了性能,也保证了线程安全

饿汉式单例模式实在静态成员变量使命的时候创建实例,不会造成线程不安全的问题


为什么要加volatile关键字?
加volatile,设置变量为线程可见,通过变量动态管理线程,减少性能损耗
volatile具有可见性、有序性,不具备原子性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值