Java多线程中如何使用原子操作

发布时间:2025-02-26 22:11:03 作者:小樊
来源:亿速云 阅读:97

在Java多线程编程中,原子操作是指不可被中断的一个或一系列操作。这些操作在执行过程中不会被其他线程干扰,从而确保数据的一致性和安全性。Java提供了java.util.concurrent.atomic包来支持原子操作。以下是一些常用的原子类和它们的用法:

  1. AtomicInteger:用于原子操作的整数。常用方法有getAndIncrement()getAndDecrement()compareAndSet()等。
import java.util.concurrent.atomic.AtomicInteger;

public class AtomicDemo {
    private static AtomicInteger counter = new AtomicInteger(0);

    public static void main(String[] args) throws InterruptedException {
        Runnable runnable = () -> {
            for (int i = 0; i < 1000; i++) {
                counter.getAndIncrement();
            }
        };

        Thread t1 = new Thread(runnable);
        Thread t2 = new Thread(runnable);
        t1.start();
        t2.start();
        t1.join();
        t2.join();

        System.out.println("Counter: " + counter.get()); // 输出:Counter: 2000
    }
}
  1. AtomicLong:用于原子操作的长整数。常用方法与AtomicInteger类似。

  2. AtomicBoolean:用于原子操作的布尔值。常用方法有getAndSet()compareAndSet()等。

  3. AtomicReference:用于原子操作的引用类型。常用方法有getAndSet()compareAndSet()等。

  4. AtomicIntegerFieldUpdaterAtomicLongFieldUpdaterAtomicReferenceFieldUpdater:这些类用于原子操作类的字段。它们需要一个目标对象和字段名作为参数,并提供原子更新指定字段的方法。

  5. LongAdderDoubleAdder:这些类适用于高并发场景下的累加操作。它们的性能比AtomicLongAtomicDouble更好,因为它们将累加操作分散到多个单元中,减少了线程竞争。

import java.util.concurrent.atomic.LongAdder;

public class LongAdderDemo {
    private static LongAdder counter = new LongAdder();

    public static void main(String[] args) throws InterruptedException {
        Runnable runnable = () -> {
            for (int i = 0; i < 1000; i++) {
                counter.increment();
            }
        };

        Thread t1 = new Thread(runnable);
        Thread t2 = new Thread(runnable);
        t1.start();
        t2.start();
        t1.join();
        t2.join();

        System.out.println("Counter: " + counter.sum()); // 输出:Counter: 2000
    }
}

使用这些原子类和方法,可以确保在多线程环境下进行安全的原子操作。

推荐阅读:
  1. Java有必要转Go语言吗
  2. PHP,C,Java 有什么区别

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:Java多线程性能优化技巧有哪些

下一篇:云监控在服务器运维中扮演什么角色

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》