许多编程语言规范都讨论了语言的原始类型及其原子类型.在某些情况下,这些是单独提到的,有些将这些定义混合在一起.在阅读了一些材料后,我逐渐意识到这两个术语之间存在差异,但它似乎要么非常微妙或太模糊.
原子类型和原始类型之间究竟有什么区别?是否包含在另一个内?
不同之处在于原始类型(int等)不是对象; 虽然在Java中存在与每种基本类型相关联的类(Integer对于int等).
原子类型是"只是"常规Java对象; 与"普通"对象的区别在于,操作它们的方法保证是原子的,因此线程安全.因为int,那就是AtomicInteger你可以.getAndSet()原子地增量等.
然而,谈论"原子类型"与"原始类型"部分是不正确的,因为一些支持原子操作的类没有链接到原始类型; 一个这样的例子是AtomicReference,但你也有AtomicIntegerArray其他一些.
另请参阅维基百科有关比较和交换的条目,或简称CAS.
此外,虽然人们会认为原始类型基本上是线程安全的,但情况并非如此; 每个线程都可以拥有自己的本地存储(这称为TLS,线程局部存储,不作为TLS,线程局部存储),因此可以拥有自己的原始变量副本; 这就是为什么你用Java volatile.
| 归档时间: |
|
| 查看次数: |
980 次 |
| 最近记录: |