我开始浏览Spring tutorial,它让我初始化一个原子序数。我不确定原子序数是多少,所以我用Google搜索并找不到直接的答案。 Java中的原子序数是什么?
答案 0 :(得分:2)
Atomic意味着确保在该类型上完成的更新操作以原子方式完成(在一个步骤中,在一个目标中)。原子类型在并发环境中使用很有价值(如#34;更好的挥发物")
答案 1 :(得分:1)
如果多个线程执行这样的代码,计数器的结果可能会少于应有的数量。
int count
void increment() {
int previous = count;
count = previous + 1;
}
这是因为增加计数器需要两个步骤,并且线程可以在另一个线程可以存储新值之前读取计数(请注意,将其重写为单行并不会改变这一事实;无论您如何编写,JVM都必须执行两个步骤)。强制多个步骤总是在一个单元中发生(例如,读取计数和存储新计数)被称为"使操作成为原子"。
"原子" values是包装值的对象,它公开了方便地提供常见原子操作的方法,例如AtomicInteger#increment()
。
答案 2 :(得分:0)
传统的多线程方法使用锁来保护共享资源。像信号量这样的同步对象为程序员提供了编写不会同时修改共享资源的代码的机制。当其中一个线程正在修改共享资源时,同步方法会阻止其他线程。显然被阻塞的线程没有做有意义的工作,等待锁被释放。
对比度的原子操作基于非阻塞算法,其中等待共享资源的线程不会被推迟。原子操作使用比较和交换(CAS)等硬件原语实现,CAS是多线程中用于同步的原子指令。
Java支持在单个变量上支持无锁,线程安全编程的原子类。这些类在java.util.concurrent.atomic包中定义。一些关键类包括AtomicBoolean,AtomicInteger,AtomicLong,AtomicIntegerArray,AtomicLongArray和AtomicReference。