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

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

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

简介

在多线程环境下,对于一个共享资源的操作,为了避免竞争条件和数据不一致的问题,需要使用线程安全的类库。Java中提供了Atomic包,包含了一些原子操作的类,其中AtomicLong是一个长整型原子变量。

AtomicLong提供了getAndIncrement()方法,即先返回当前的值,再将当前值加1。

语法
public final long getAndIncrement()
示例

下面是一个使用AtomicLong getAndIncrement()方法的示例:

import java.util.concurrent.atomic.AtomicLong;

public class AtomicLongExample {
    private static AtomicLong counter = new AtomicLong(0);

    public static void main(String[] args) {
        int numThreads = 10;
        Thread[] threads = new Thread[numThreads];
        for (int i = 0; i < numThreads; i++) {
            threads[i] = new Thread(new Runnable() {
                public void run() {
                    for (int j = 0; j < 100; j++) {
                        System.out.println(counter.getAndIncrement());
                    }
                }
            });
            threads[i].start();
        }

        for (int i = 0; i < numThreads; i++) {
            try {
                threads[i].join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

代码中创建了一个AtomicLong类型的计数器counter,然后创建了10个线程,每个线程都会执行100次counter的getAndIncrement()方法,获取当前计数器的值并将其加1,最后输出到控制台上。在输出结果中,每个线程都获得了唯一而连续的计数值,表明了AtomicLong的原子性和线程安全性。

总结

AtomicLong getAndIncrement()方法是一个非常实用的原子操作,具有线程安全的特性,可以在多线程环境下保证数据的一致性和正确性。在使用时需要注意,该方法只会对当前的值加1,并不会对对象的值进行修改,需要将返回值重新赋值给原对象。