并发三特性:原子性,可见性,有序性

并发的三个特性

我们常说的并发场景下有三个重要特性:原子性、可见性、有序性。只有在满足了这三个特性,才能保证并发程序正确执行,否则就会出现各种各样的问题。

原子性: CAS 和 Atomic* 类,可以保证简单操作的原子性,对于一些复杂的操作,可以使用synchronized 或各种锁来实现。

可见性:指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

有序性:程序执行的顺序按照代码的先后顺序执行,禁止进行指令重排序。看似理所当然的事情,其实并不是这样,指令重排序是JVM为了优化指令,提高程序运行效率,在不影响单线程程序执行结果的前提下,尽可能地提高并行度。但是在多线程环境下,有些代码的顺序改变,有可能引发逻辑上的不正确。

而 volatile 做实现了两个特性,可见性和有序性。所以说在多线程环境中,需要保证这两个特性的功能,可以使用 volatile 关键字。

双重校验锁简单实现

class Singleton_3{
//    声明静态属性
    private volatile static Singleton_3 singleton_3;
//    私有化构造器
    private  Singleton_3(){}
//    公共静态get方法
    public static Singleton_3 getSingleton_3(){
        if (singleton_3 == null) {//防止加锁开销
            synchronized(singleton_3){
                if (singleton_3 == null) {//防止1线程出去释放锁2线程进入创建两个对象
                    singleton_3 = new Singleton_3();
                }
            }
        }
        return singleton_3;
    }
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值