JAVA中的原子操作

时间:2013-04-22 21:22:32

标签: java

我知道为什么在Java中使用同步,但我找不到这个问题的答案:

do I need to synchronized an atomic operation?

如果是,为什么?

3 个答案:

答案 0 :(得分:4)

如果它真的是原子的,那么没有。

您需要同步才能提供连贯状态。根据原子的定义,任何原子操作都会产生cohernt状态。

答案 1 :(得分:3)

Java中真正的原子操作很少。来自Atomic Access Java教程:

  • 对于参考变量和大多数原始变量(除longdouble之外的所有类型),读取和写入都是原子的。
  • 对于声明为volatile的所有变量(包括 longdouble变量),读取和写入都是原子的。

请注意,同步不仅用于互斥,而且还需要线程之间的可靠通信。即使您正在处理原子可读和可写的数据,也无法保证一个线程何时会看到另一个线程所做的更改。因此,您需要同步访问共享数据,或确保声明共享变量volatile

答案 2 :(得分:2)

您需要确保原子操作不会扩展到多个读取和更新操作。像递增和递减操作这样的简单表达式会扩展为多个动作,因此i ++和i--是原子操作。因此,大多数情况下,如果您正在从多个线程读取和更新变量,那么最好使用同步方法。

更多详情: http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html