什么操作是原子操作

ASD*_*ASD 6 java

我有点困惑......

从long和double除了long和double之外的几个线程读取\写入是真的,并且只需要使用volatile和long和double吗?

Lou*_*man 8

这听起来像是指JLS的这一部分.保证所有原始类型 - 除了doublelong- 所有线程都会看到一些实际写入该变量的值.(使用doublelong,前四个字节可能已由一个线程写入,最后四个字节可能由另一个线程写入,如JLS的该部分所述.)但它们不一定会同时看到相同的值,除非变量已标记volatile.

即使使用volatile,x += 3也不是原子的,因为它x = x + 3执行读取和写入,并且可能x在读取和写入之间进行写入.这就是我们拥有AtomicInteger和其他公用事业一样的原因java.util.concurrent.