Objective C中的`nonatomic`的Java等价物是什么?

时间:2014-03-26 23:42:56

标签: java objective-c

我的猜测是它与volatile关键字类似,它在Java中给出了之前发生的关系,可见性和原子值赋值(在> 32bit类型的情况下)。是吗?

(编辑:我的猜测是atomic属性与volatile相似,而不是nonatomic但事实证明它无论如何都是

1 个答案:

答案 0 :(得分:0)

根据{{​​3}},Objective C中的“Atomic”类似于Java中的this article变量,因此它不能同时由两个线程更改。 nonatomic是相反的,意思是不是synchronized的变量,因此可以同时由多个线程更改。

关于volatile,根据synchronized


Java编程语言也有volatile关键字,但它用于某种不同的目的。应用于字段时,Java volatile保证:

  • (在所有Java版本中)对volatile变量的读写都有一个全局排序。这意味着访问volatile字段的每个线程将在继续之前读取其当前值,而不是(可能)使用缓存值。 (但是,无法保证常规读写的易失性读写的相对顺序,这意味着它通常不是一个有用的线程构造。)
  • (在Java 5或更高版本中)易失性读写建立了先发生关系,就像获取和释放互斥锁一样。
  • 使用volatile可能比锁更快,但在某些情况下不起作用。在Java 5中扩展了volatile有效的情况范围;特别是,双重检查锁定现在可以正常工作。