【面试问题】用过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

相关文章
|
3天前
|
安全 算法 Java
java多线程面试题2019整理
java多线程面试题2019整理
|
10天前
|
SQL Java
java面试题笔试常见选择题大全含答案
java面试题笔试常见选择题大全含答案
|
3天前
|
算法 Java 调度
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
7 0
|
2天前
|
缓存 Java 数据库连接
java面试题目 强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么?
【6月更文挑战第28天】在 Java 中,理解和正确使用各种引用类型(强引用、软引用、弱引用、幻象引用)对有效的内存管理和垃圾回收至关重要。下面我们详细解读这些引用类型的区别及其具体使用场景。
11 3
|
10天前
|
缓存 安全 Java
Java线程面试题含答案
Java线程面试题含答案
|
3天前
|
负载均衡 NoSQL Dubbo
java分布式面试快问快答
java分布式面试快问快答
11 0
|
3天前
|
XML Java 数据库连接
面试必备!Java核心技术100+面试题
面试必备!Java核心技术100+面试题
|
3天前
|
SQL 网络协议 Java
技术经验分享:Java不会或做错的面试题总结
技术经验分享:Java不会或做错的面试题总结
14 0
|
4天前
|
安全 Java 中间件
《面试专题-----经典高频面试题收集一》解锁 Java 面试的关键:深度解析常见高频经典面试题(第一篇)
《面试专题-----经典高频面试题收集一》解锁 Java 面试的关键:深度解析常见高频经典面试题(第一篇)
10 0
|
4天前
|
安全 Java API
《面试专题-----经典高频面试题收集三》解锁 Java 面试的关键:深度解析并发编程基础篇高频经典面试题(第三篇)
《面试专题-----经典高频面试题收集三》解锁 Java 面试的关键:深度解析并发编程基础篇高频经典面试题(第三篇)
8 0