Java atomic 的原理?

2023-12-21 09:27:09

Java atomic 的原理?

在 Java 中,java.util.concurrent.atomic 包提供了一组原子类,用于实现原子性操作,避免了多线程并发访问时可能出现的竞态条件。这些原子类使用底层的 CAS(Compare-And-Swap)操作,保证了操作的原子性。

CAS 操作包含三个参数:内存位置 V,旧的预期值 A 和新值 B。CAS 操作的语义是:“只有当 V 的值等于 A 时,将 V 的值设置为 B,否则什么都不做”。

以下是一个简单的代码示例,演示了 AtomicInteger 的使用:

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerExample {

    public static void main(String[] args) throws InterruptedException {
        AtomicInteger counter = new AtomicInteger(0);

        // 使用多线程对 counter 进行增加操作
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                counter.incrementAndGet(); // 原子性增加
            }
        });

        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                counter.incrementAndGet(); // 原子性增加
            }
        });

        thread1.start();
        thread2.start();

        thread1.join();
        thread2.join();

        // 输出最终结果
        System.out.println("Final Counter Value: " + counter.get());
    }
}

在上述示例中,AtomicInteger 类的 incrementAndGet() 方法是原子性的,它使用 CAS 操作确保了对共享变量 counter 的原子性操作。即使多个线程并发执行增加操作,最终的结果也是正确的。

文章来源:https://blog.csdn.net/sanmansan/article/details/135075713
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。