【面试问题】用过Java 中哪些原子类?

简介: 【1月更文挑战第27天】【面试问题】用过Java 中哪些原子类?

在 Java 中,原子类是一组提供了原子性操作的类,可以在多线程环境中使用,保证了特定操作的原子性。这些类位于 java.util.concurrent.atomic 包中,主要包括以下几个常用的原子类:

1. AtomicInteger:

AtomicInteger 提供了对整数类型的原子操作。它的常见方法包括:

  • get:获取当前值。
  • set:设置新值。
  • getAndSet:获取并设置新值。
  • incrementAndGet:原子性地增加 1。
  • decrementAndGet:原子性地减少 1。
  • addAndGet:原子性地增加指定的值。
importjava.util.concurrent.atomic.AtomicInteger;
publicclassAtomicIntegerExample {
publicstaticvoidmain(String[] args) {
AtomicIntegeratomicInt=newAtomicInteger(0);
intcurrentValue=atomicInt.get();
intnewValue=atomicInt.incrementAndGet();
System.out.println("Current value: "+currentValue);
System.out.println("New value after increment: "+newValue);
    }
}

2. AtomicLong:

AtomicLong 类似于 AtomicInteger,但是针对长整型。它提供了类似的原子操作,用于对长整型数据进行原子操作。

3. AtomicBoolean:

AtomicBoolean 提供了对布尔类型的原子操作。它的主要方法包括:

  • get:获取当前值。
  • set:设置新值。
  • getAndSet:获取并设置新值。
  • compareAndSet:比较并设置新值。
  • weakCompareAndSet:弱化版本的 compareAndSet,性能更好,但不保证同步语义。
importjava.util.concurrent.atomic.AtomicBoolean;
publicclassAtomicBooleanExample {
publicstaticvoidmain(String[] args) {
AtomicBooleanatomicBoolean=newAtomicBoolean(true);
booleancurrentValue=atomicBoolean.get();
atomicBoolean.set(false);
System.out.println("Current value: "+currentValue);
System.out.println("New value after set: "+atomicBoolean.get());
    }
}

4. AtomicReference:

AtomicReference 提供了对引用类型的原子操作。它的主要方法包括:

  • get:获取当前值。
  • set:设置新值。
  • getAndSet:获取并设置新值。
  • compareAndSet:比较并设置新值。
  • weakCompareAndSet:弱化版本的 compareAndSet,性能更好,但不保证同步语义。
importjava.util.concurrent.atomic.AtomicReference;
publicclassAtomicReferenceExample {
staticclassData {
Stringvalue;
Data(Stringvalue) {
this.value=value;
        }
    }
publicstaticvoidmain(String[] args) {
AtomicReference<Data>atomicReference=newAtomicReference<>(newData("Initial Value"));
DatacurrentValue=atomicReference.get();
atomicReference.set(newData("New Value"));
System.out.println("Current value: "+currentValue.value);
System.out.println("New value after set: "+atomicReference.get().value);
    }
}

5. AtomicStampedReference:

AtomicStampedReference 是对 AtomicReference 的增强,它引入了版本号(Stamp)的概念,用于解决 ABA 问题。ABA 问题指的是一个值原来是 A,后来被改成了 B,然后又被改回了 A,但是在整个过程中,可能有其他线程修改了这个值。AtomicStampedReference 在比较和设置时,除了比较引用本身外,还会比较版本号。

6. AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicReferenceFieldUpdater:

这组类允许对指定类的指定字段进行原子更新。这些类的实例通常由工厂方法 newUpdater 创建,提供了对字段的原子更新方法,如 compareAndSet

相关文章
|
27天前
|
Java 程序员
java线程池讲解面试
java线程池讲解面试
50 1
|
15小时前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
15小时前
|
Java
[Java 面试题] ArrayList篇
[Java 面试题] ArrayList篇
|
1天前
|
Java 调度
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
8 1
|
1天前
|
存储 安全 Java
每日一道Java面试题:说一说Java中的泛型?
今天的每日一道Java面试题聊的是Java中的泛型,泛型在面试的时候偶尔会被提及,频率不是特别高,但在日后的开发工作中,却是是个高频词汇,因此,我们有必要去认真的学习它。
3 0
|
1天前
|
Java 编译器
每日一道Java面试题:方法重载与方法重写,这把指定让你明明白白!
每日一道Java面试题:方法重载与方法重写,这把指定让你明明白白!
3 0
|
5天前
|
XML 缓存 Java
Java大厂面试题
Java大厂面试题
18 0
|
5天前
|
存储 安全 Java
Java大厂面试题
Java大厂面试题
11 0
|
5天前
|
存储 安全 Java
Java大厂面试题
Java大厂面试题
13 0
|
6天前
|
安全 Java
就只说 3 个 Java 面试题 —— 02
就只说 3 个 Java 面试题 —— 02
19 0