Volatile在单列模式中的作用


前言

Volatile在单列模式中的作用,学习笔记。参考抖音渡一老师对Volatile的解析(摘自抖音:《渡一Java学习频道》,该文章为学习笔记涉及侵权请告知删稿)


一、Volatile的作用?

  1. 对象可视化即在多线程当中被volatile修饰的属性可以被多个线程感知。类似于线程A修改某个被volatile修饰的属性,这个修改的值会通知其他访问该属性的线程。其他属性对于这个值也会随着线程A的更改同步更改。
  2. 解决指令重排

二、Volatile在单列模式的运用

1.单列模式代码

代码如下(示例):
下面的代码是大多数人都会写的懒汉单列模式,改代码有可能导致single这个属性创建多次即便加了锁和双重判断。因为在创建single对象的时候,底层的虚拟机在执行构造方法和加载内部空间信息这两个步骤来回切换,有可能先执行构造方法再去加载内部空间,也有可能先加载内部空间信息在去执行构造方法。这种情况下,这个single对象被两个线程拿到但是执行的顺序不一致从而创建两个对象(即为指令重排)

public class Single {
    private Single(){}
    private static Single single;
    public static  Single getSingle(){
        synchronized (single.getClass()){
            if(single==null){
                 single = new Single();
            }
        }
        return single;
    }
}

2.解决办法

代码如下(示例):
在sing对象属性前加入volatile关键字

public class Single {
    private Single(){}
    private static volatile Single single;
    public static  Single getSingle(){
        synchronized (single.getClass()){
            if(single==null){
                 single = new Single();
            }
        }
        return single;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值