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

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

Java中的 AtomicBoolean getAndSet() 方法及示例

Java中的AtomicBoolean是一个在多线程环境下可以安全访问的布尔类型变量。AtomicBoolean类提供了许多方法来操作这个变量,其中一个重要的方法是getAndSet(),它可以在同一时间内获取当前值并设置一个新值。

AtomicBoolean类简介

Java中的AtomicBoolean是java.util.concurrent.atomic包中的一个类。它提供了以下几个重要的方法:

  • get():返回当前值。
  • set(boolean newValue):设置值。
  • getAndSet(boolean newValue):获取当前值并设置一个新值。
  • compareAndSet(boolean expect, boolean update):如果当前值等于期望值,则使用新值更新变量。
getAndSet()方法介绍

getAndSet()方法是AtomitBoolean类中比较常用的方法之一。它可以在同一时间内获取当前值并设置一个新值。方法的原型如下:

public final boolean getAndSet(boolean newValue)
  • 参数:newValue - 新的布尔值。
  • 返回值:旧的布尔值。

使用这个方法时,会有一个原子性的操作。这个操作就是获取当前值和设置一个新值。这样就可以保证线程安全,防止多线程环境下的数据竞争。

示例代码

下面是一个使用getAndSet()方法的示例代码:

import java.util.concurrent.atomic.AtomicBoolean;

public class AtomicBooleanExample {

    private static AtomicBoolean atomicBool = new AtomicBoolean(true);

    public static void main(String[] args) {
        System.out.println("AtomicBoolean value initially is : " + atomicBool.get());

        boolean previousValue = atomicBool.getAndSet(false);
        System.out.println("Previous AtomicBoolean value : " + previousValue);

        System.out.println("Current AtomicBoolean value is : " + atomicBool.get());
    }
}

示例代码创建一个名称为AtomicBooleanExample的类。在main()方法中,我们定义了一个AtomicBoolean类型的变量atomicBool,并设置了初始值为true。在打印之前,使用get()方法获取并打印了当前值。之后,使用getAndSet()方法将atomicBool的值从true更改为false,并将旧值存储在旧变量previousValue中。最后,使用get()方法再次获取atomicBool的当前值并将其打印。

以下为示例代码的MD格式:

import java.util.concurrent.atomic.AtomicBoolean;

public class AtomicBooleanExample {

    private static AtomicBoolean atomicBool = new AtomicBoolean(true);

    public static void main(String[] args) {
        System.out.println("AtomicBoolean value initially is : " + atomicBool.get());

        boolean previousValue = atomicBool.getAndSet(false);
        System.out.println("Previous AtomicBoolean value : " + previousValue);

        System.out.println("Current AtomicBoolean value is : " + atomicBool.get());
    }
}