java - volatile 与原子性

标签 java volatile

我在下面的某处读到。

Java volatile keyword doesn't means atomic, its common misconception that after declaring volatile, ++ operation will be atomic, to make the operation atomic you still need to ensure exclusive access using synchronized method or block in Java.

那么如果两个线程同时攻击一个volatile原始变量会发生什么?

这是否意味着无论谁锁定它,都会首先设置它的值。如果与此同时,其他线程出现并在第一个线程更改其值时读取旧值,那么新线程不会读取其旧值吗?

Atomic 和 volatile 关键字有什么区别?

最佳答案

volatile 关键字的作用大致是使对该变量的每个单独的读取或写入操作对所有线程都是原子可见的。

然而,值得注意的是,一个需要不止一次读/写的操作——例如i++,它相当于i = i + 1,它只做一个读一写 -- 不是原子的,因为另一个线程可能在读和写之间写入 i

Atomic 类,如 AtomicIntegerAtomicReference,以原子方式提供更广泛的操作,特别包括 AtomicInteger

关于java - volatile 与原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19744508/

相关文章:

java - 加快 Netbeans 7.3 上的 Web 应用程序开发测试和调试速度

java - 在Java中将HTML解析为字符串

c# - 为什么 C# volatile 不保护读写重排序?

java - 在 Android Studio 中使用 unirest 的问题

java - 一个非常简单的应用程序的 Spring 启动异常

java - 单元测试处理数据库记录的函数

c - C语言中程序的范围是什么意思?

java - 可以证明应该使用 "volatile"declare 的代码示例

c++ - volatile 变量在一个客户线程和一个生产者线程中安全吗?