首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:什么是原子序数?

Java:什么是原子序数?
EN

Stack Overflow用户
提问于 2014-11-08 10:53:53
回答 3查看 1.7K关注 0票数 2

我开始读弹簧教程,它让我初始化一个原子序数。我不知道原子序数是什么,所以我搜索了一下,找不到一个直接的答案。什么是Java中的原子序数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-08 10:56:03

原子意味着在该类型上完成的更新操作是以原子方式完成的(在一个步骤中,在一个目标中)。在并发上下文中使用原子类型是有价值的(作为“更好的挥发物”)

票数 3
EN

Stack Overflow用户

发布于 2014-11-08 11:11:41

如果有多个线程执行这样的代码,计数器的结果可能会比它应该的少。

代码语言:javascript
复制
int count
void increment() {
    int previous = count;
    count = previous + 1;
}

这是因为它需要两个步骤来增加计数器,并且一个线程可以在另一个线程存储新值之前读取计数(请注意,将其重写为一行并不会改变这一事实;JVM必须执行两个步骤,而不管您如何编写它)。强制多个步骤总是发生在一个单元中(例如,读取计数和存储新计数)称为“使操作原子化”。

“原子”值是包装值并公开方便地提供公共原子操作(如AtomicInteger#increment() )的方法的对象。

票数 2
EN

Stack Overflow用户

发布于 2014-11-08 12:29:00

参考资料:Java原子变量

传统的多线程方法使用锁来保护共享资源。同步对象(如信号量)为程序员编写不并发修改共享资源的代码提供了机制。当其中一个线程正在修改共享资源时,同步方法阻塞其他线程。显然,被阻塞的线程在等待释放锁时没有做有意义的工作。

对比上的原子操作基于非阻塞算法,其中等待共享资源的线程不会被推迟。原子操作使用诸如比较和交换(CAS)这样的硬件原语来实现,这是用于多线程同步的原子指令。

Java支持原子类,这些类支持对单变量进行无锁线程安全编程。这些类是在java.util.concurrent.atomic包中定义的。一些关键类包括AtomicBoolean、AtomicInteger、AtomicLong、AtomicIntegerArray、AtomicLongArray和AtomicReference。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26816313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档