📌  相关文章
📜  Java中的 AtomicInteger getAndIncrement() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:01:50.664000             🧑  作者: Mango

Java中的AtomicInteger getAndIncrement()方法及示例

概述

在并发编程中,我们需要使用一些线程安全的数据类型来避免并发问题,其中AtomicInteger是一个常用的线程安全的整数类型,它可以保证多线程环境下对该变量进行原子性操作。其中,官方提供了getAndIncrement()方法,该方法会返回当前值并自增1。

语法
public final int getAndIncrement()
示例
import java.util.concurrent.atomic.AtomicInteger;

class AtomicDemo extends Thread {
    private static AtomicInteger counter = new AtomicInteger();

    public void run() {
        System.out.println("Thread " + Thread.currentThread().getName() + " has started");
        for (int i = 0; i < 5; i++) {
            System.out.println(getName() + ": " + counter.getAndIncrement());
        }
        System.out.println("Thread " + Thread.currentThread().getName() + " has finished");
    }
}

public class Main {
    public static void main(String[] args) {
        AtomicDemo thread1 = new AtomicDemo();
        AtomicDemo thread2 = new AtomicDemo();
        thread1.start();
        thread2.start();
    }
}

代码说明:

  1. 首先定义了一个AtomicInteger类型的counter,用于保存原子整数。

  2. 定义了一个AtomicDemo类,继承自Thread类,用于模拟多线程环境;在run方法中,通过getAndIncrement()方法获取当前counter的值,并自增1。

  3. 在主方法中,创建两个线程,分别执行thread1.start()和thread2.start()方法,模拟多线程环境。运行结果如下:

    Thread Thread-0 has started
    Thread Thread-1 has started
    Thread-0: 0
    Thread Thread-1 has finished
    Thread-0: 1
    Thread-0: 2
    Thread-0: 3
    Thread-0: 4
    Thread Thread-0 has finished
    

由于getAndIncrement()方法是原子性的,可以保证多线程环境下获取和自增操作的安全,因此线程Thread-0和Thread-1的输出结果可交替出现。