MST

星途 面试题库

面试题:Java非阻塞算法之实现细节

在Java中,如何通过原子类(如AtomicInteger)实现一个简单的非阻塞计数器?请说明关键步骤和涉及的原理,并写出核心代码片段。
15.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

关键步骤

  1. 创建AtomicInteger实例。
  2. 调用AtomicIntegerincrementAndGet等原子操作方法进行计数。

原理

AtomicInteger利用处理器的CAS(Compare and Swap)指令实现非阻塞操作。CAS操作包含三个操作数:内存位置、预期原值、新值。当且仅当内存位置的值与预期原值相匹配时,处理器才会自动将该位置值更新为新值,否则不会执行任何操作。通过这种方式,AtomicInteger可以在多线程环境下实现无锁的原子操作,避免了传统锁机制带来的阻塞和性能开销。

核心代码片段

import java.util.concurrent.atomic.AtomicInteger;

public class NonBlockingCounter {
    private AtomicInteger counter = new AtomicInteger(0);

    public int increment() {
        return counter.incrementAndGet();
    }

    public int getCount() {
        return counter.get();
    }
}

使用示例:

public class Main {
    public static void main(String[] args) {
        NonBlockingCounter counter = new NonBlockingCounter();
        System.out.println(counter.increment());
        System.out.println(counter.getCount());
    }
}