我开始读弹簧教程,它让我初始化一个原子序数。我不知道原子序数是什么,所以我搜索了一下,找不到一个直接的答案。什么是Java中的原子序数?
发布于 2014-11-08 10:56:03
原子意味着在该类型上完成的更新操作是以原子方式完成的(在一个步骤中,在一个目标中)。在并发上下文中使用原子类型是有价值的(作为“更好的挥发物”)
发布于 2014-11-08 11:11:41
如果有多个线程执行这样的代码,计数器的结果可能会比它应该的少。
int count
void increment() {
int previous = count;
count = previous + 1;
}这是因为它需要两个步骤来增加计数器,并且一个线程可以在另一个线程存储新值之前读取计数(请注意,将其重写为一行并不会改变这一事实;JVM必须执行两个步骤,而不管您如何编写它)。强制多个步骤总是发生在一个单元中(例如,读取计数和存储新计数)称为“使操作原子化”。
“原子”值是包装值并公开方便地提供公共原子操作(如AtomicInteger#increment() )的方法的对象。
发布于 2014-11-08 12:29:00
参考资料:Java原子变量
传统的多线程方法使用锁来保护共享资源。同步对象(如信号量)为程序员编写不并发修改共享资源的代码提供了机制。当其中一个线程正在修改共享资源时,同步方法阻塞其他线程。显然,被阻塞的线程在等待释放锁时没有做有意义的工作。
对比上的原子操作基于非阻塞算法,其中等待共享资源的线程不会被推迟。原子操作使用诸如比较和交换(CAS)这样的硬件原语来实现,这是用于多线程同步的原子指令。
Java支持原子类,这些类支持对单变量进行无锁线程安全编程。这些类是在java.util.concurrent.atomic包中定义的。一些关键类包括AtomicBoolean、AtomicInteger、AtomicLong、AtomicIntegerArray、AtomicLongArray和AtomicReference。
https://stackoverflow.com/questions/26816313
复制相似问题