2021-06-16volatile的三种特性

本文通过一个示例代码展示了在Java中,volatile关键字并不保证操作的原子性,而AtomicInteger类的getAndIncrement()方法则提供了原子性操作。在多线程环境下,使用AtomicInteger可以避免并发问题,确保计数的正确性。文章讨论了并发编程中volatile与原子类的区别,强调了在高并发场景下选择合适的数据类型的重要性。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//volatile不保证原子性
public class VDemo01 {
    //原子类的int 不用加锁也一样
    private volatile static AtomicInteger num = new AtomicInteger();
    public static void add(){
        //num++;
        num.getAndIncrement(); // num++
    }

    public static void main(String[] args) {
        for (int i = 0; i < 20; i++) {
            new Thread(()->{
                for (int j= 1; j <= 1000; j++) {
                    add();
                }
            }).start();
        }
        while (Thread.activeCount()>2){
            Thread.yield();
        }

        System.out.println(Thread.currentThread().getName()+" "+num);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值