java之多线程原子性

本文探讨了Java中多线程环境下变量原子性的问题,通过实例展示了由于线程副本导致的并发问题。文章介绍了Volatile关键字的作用,但指出其无法保证原子性。接着详细讲解了synchronized的同步机制,并提到了Atomic包中的原子类,如AtomicInteger,它们利用CAS(Compare and Swap)算法和自旋锁实现无锁编程,确保线程安全地更新变量。文中还列举了AtomicInteger的常见方法,并对CAS算法进行了简要说明。
摘要由CSDN通过智能技术生成

我们来看一段简单的代码:

public class marry {
    static int money = 0;

    public static void main(String[] args) {
        new Thread(() ->{
            while (money < 220000){
//                System.out.println("现在的钱有"+ money);
            }
            System.out.println("可以结婚了");
        }).start();


        new Thread(() -> {
            System.out.println("给我5年,存22w");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            money = 220000;
            System.out.println("存够钱啦");
        }).start();
    }
}

结果为:

问题在于money发生改变时,第一个线程无法获得最新的money。

1,堆内存是唯一的,每一个线程都有自己的线程栈。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值