Java atomic 的原理?
2023-12-21 09:27:09
Java atomic 的原理?
在 Java 中,java.util.concurrent.atomic
包提供了一组原子类,用于实现原子性操作,避免了多线程并发访问时可能出现的竞态条件。这些原子类使用底层的 CAS(Compare-And-Swap)操作,保证了操作的原子性。
CAS 操作包含三个参数:内存位置 V,旧的预期值 A 和新值 B。CAS 操作的语义是:“只有当 V 的值等于 A 时,将 V 的值设置为 B,否则什么都不做”。
以下是一个简单的代码示例,演示了 AtomicInteger
的使用:
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicIntegerExample {
public static void main(String[] args) throws InterruptedException {
AtomicInteger counter = new AtomicInteger(0);
// 使用多线程对 counter 进行增加操作
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
counter.incrementAndGet(); // 原子性增加
}
});
Thread thread2 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
counter.incrementAndGet(); // 原子性增加
}
});
thread1.start();
thread2.start();
thread1.join();
thread2.join();
// 输出最终结果
System.out.println("Final Counter Value: " + counter.get());
}
}
在上述示例中,AtomicInteger
类的 incrementAndGet()
方法是原子性的,它使用 CAS 操作确保了对共享变量 counter
的原子性操作。即使多个线程并发执行增加操作,最终的结果也是正确的。
文章来源:https://blog.csdn.net/sanmansan/article/details/135075713
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!