当前位置:首页 > Java > 正文

Java原子长整型数组详解(AtomicLongArray并发编程入门指南)

在多线程并发编程中,保证数据的线程安全性至关重要。Java 提供了 java.util.concurrent.atomic 包来帮助开发者实现高效、无锁的原子操作。其中,AtomicLongArray 是一个非常实用的类,它允许我们在不使用显式同步(如 synchronized)的情况下对长整型数组进行线程安全的操作。

本教程将带你从零开始,深入浅出地学习 Java原子长整型数组 的使用方法,即使你是 Java 并发编程的小白,也能轻松掌握!

什么是 AtomicLongArray?

AtomicLongArray 是一个线程安全的长整型数组,其内部每个元素都支持原子操作,比如 getAndSetcompareAndSetaddAndGet 等。这些操作底层基于 CPU 的 CAS(Compare-And-Swap)指令实现,避免了传统锁带来的性能开销。

Java原子长整型数组详解(AtomicLongArray并发编程入门指南) Java原子长整型数组 AtomicLongArray教程 并发编程Java 线程安全数组操作 第1张

如何创建 AtomicLongArray?

你可以通过以下两种方式创建 AtomicLongArray

// 方式1:指定数组长度(所有元素初始化为0) AtomicLongArray array1 = new AtomicLongArray(5); // 方式2:传入一个 long[] 数组(会复制一份,原数组不受影响) long[] initialValues = {10L, 20L, 30L}; AtomicLongArray array2 = new AtomicLongArray(initialValues);

常用方法示例

下面是一些最常用的 AtomicLongArray 方法及其用法:

import java.util.concurrent.atomic.AtomicLongArray; public class AtomicLongArrayExample { public static void main(String[] args) { // 创建长度为3的AtomicLongArray AtomicLongArray arr = new AtomicLongArray(3); // 设置索引0的值为100 arr.set(0, 100L); // 获取索引0的当前值 long val = arr.get(0); System.out.println("Index 0 value: " + val); // 输出: 100 // 原子地将索引1的值加50 long newValue = arr.addAndGet(1, 50L); System.out.println("After addAndGet(1, 50): " + newValue); // 输出: 50 // 原子地比较并设置:如果索引2当前是0,则设为200 boolean success = arr.compareAndSet(2, 0L, 200L); System.out.println("compareAndSet success: " + success); // true // 打印整个数组 for (int i = 0; i < arr.length(); i++) { System.out.println("arr[" + i + "] = " + arr.get(i)); } } }

为什么使用 AtomicLongArray?

在高并发场景下,如果多个线程同时修改普通 long[] 数组的同一位置,会出现数据竞争(race condition),导致结果不可预测。而 AtomicLongArray 通过硬件级别的原子指令确保每次操作都是“不可分割”的,从而实现 线程安全数组操作

相比使用 synchronized 同步块,AtomicLongArray 性能更高,尤其在读多写少或低竞争场景下优势明显。这也是现代 并发编程Java 实践中推荐的方式之一。

注意事项

  • 虽然单个操作是原子的,但多个操作组合(如先 get 再 set)并不是原子的,需要额外同步。
  • AtomicLongArray 不是 List,不支持动态扩容,大小在创建时固定。
  • 适用于数值型计数器、统计指标等场景,不适合存储复杂对象。

总结

AtomicLongArray 是 Java 并发工具包中一个强大而高效的类,特别适合需要对长整型数组进行高并发、无锁操作的场景。通过本 AtomicLongArray教程,你应该已经掌握了它的基本用法和适用场景。

记住:在编写多线程程序时,优先考虑使用 java.util.concurrent.atomic 包中的原子类,它们能让你的代码更简洁、更高效、更安全!

关键词回顾:Java原子长整型数组、AtomicLongArray教程、并发编程Java、线程安全数组操作