【笔记】并发执行,多线程注意事项,volatile关键字AtomicInteger类

https://blog.csdn.net/xueping_wu/article/details/124541419

volatile

  • 为数据提供了可见性
    保证每次线程执行的时候都重新读取
  • 让编译器不再优化这部分代码
    指令都不再重新编排
  • 为了保证原子性需要对方法使用synchronized关键字加锁

AtomicInteger

  • 保证了数据的原子性,即数据在执行多个指令时不会被抢断

DCL 双端检测机制

即在加锁前加锁后,主体代码执行之前都对锁进行判断
第一次加锁是确认加锁是否被允许,如果允许则加锁
加锁后再次判断,可能会有别的线程在我们执行加锁前修改了数据
例子:

// DCL(Double Check Lock双端检锁机制)
        if (instance == null) {  // a行
            synchronized (SingletonDemo.class) {
                if (instance == null) {  // b行
                    instance = new SingletonDemo();  // c行
                }
            }
        }
        return instance;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值