如果包装器类已经不可变,为什么我们需要Atomic *类?

毛茸茸

我最近在java.util.concurrent.atomic包中遇到了原子类据我所知,不可变类在默认情况下本质上是线程安全的,因此我们不需要同步它们。后来我才知道包装器类(例如Integer,Boolean,Character等)本质上是不可变的,所以为什么我们需要Atomic *类(例如AtomicInteger或AtomicLong)。另外,请解释什么是AtomicReference

丹尼尔·普瑞登(Daniel Pryden)

原子类是可变的,但在修改方面具有很强的内存一致性保证。因此,它们与不变的包装器类有不同的用途。

这些Atomic*的真正优势在于,它们公开了原子比较和交换方法,这对于实现无锁算法非常有用

像许多中级到高级并发工具一样,如果您无法想象为什么会需要这样的东西,那么您可能不应该尝试使用它们。如果您坚持到处都是不变性或显式锁定,那么您可能将不需要原子。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

休眠域类可能出什么问题–因此我们需要(单元)测试它们?

来自分类Dev

为什么我们在类中声明静态变量,而在类外部定义?

来自分类Dev

PyQt4:为什么我们需要在对super()的调用中传递类名

来自分类Dev

为什么我们不能在方法之外使用类的对象来调用类的方法?

来自分类Dev

自定义异常类-我们为什么需要它?

来自分类Dev

为什么LinkedListNode类是不可变的?

来自分类Dev

为什么我们需要抽象类而不是虚拟类?

来自分类Dev

如果我们可以简单地重写超类的方法或使用抽象类,为什么还要使用接口?

来自分类Dev

为什么我们需要在famo.us中使用TransitionableTransform类?

来自分类Dev

为什么我们必须对不可复制的类进行防御性复制

来自分类Dev

在Java / Swing中,为什么我们将类用于动作侦听器?

来自分类Dev

为什么我们需要在ASP.NET MVC中调用父类的空虚方法

来自分类Dev

为什么我们需要将Apply和Applicative类型类分开?

来自分类Dev

为什么我们需要Java中的Properties类?

来自分类Dev

为什么forEach中的迭代器对于结构是不可变的,但对于类却是可变的?

来自分类Dev

为什么是这个类可变的?

来自分类Dev

Python,为什么我们可以创建类创建中未定义的类变量?

来自分类Dev

为什么不同于类的其他成员,我们为什么需要定义类的静态变量?

来自分类Dev

Java:为什么我们可以从非子类访问字段和方法时需要扩展类

来自分类Dev

我们是否需要为Utility类创建接口?

来自分类Dev

在TreeMap的情况下,如果将我们自己的类对象作为键传递,那么需要实现Comparable或Comparator的接口,为什么?

来自分类Dev

什么是可变类。我们如何在C#中创建一个可变且不可变的类

来自分类Dev

我们什么时候需要数据类?

来自分类Dev

为什么我们在python中的每个方法上都需要相应的类函数?

来自分类Dev

我们可以用C ++中的非模板类“包装”模板类吗?

来自分类Dev

Android:扩展应用程序类。为什么我们需要实现单例模式?

来自分类Dev

为什么我们在控制器类中添加 @ModelAttribute("r") Reg reg?

来自分类Dev

为什么我们需要特定的类来处理请求和响应?

来自分类Dev

为什么不可变类不能有 setter 方法?

Related 相关文章

  1. 1

    休眠域类可能出什么问题–因此我们需要(单元)测试它们?

  2. 2

    为什么我们在类中声明静态变量,而在类外部定义?

  3. 3

    PyQt4:为什么我们需要在对super()的调用中传递类名

  4. 4

    为什么我们不能在方法之外使用类的对象来调用类的方法?

  5. 5

    自定义异常类-我们为什么需要它?

  6. 6

    为什么LinkedListNode类是不可变的?

  7. 7

    为什么我们需要抽象类而不是虚拟类?

  8. 8

    如果我们可以简单地重写超类的方法或使用抽象类,为什么还要使用接口?

  9. 9

    为什么我们需要在famo.us中使用TransitionableTransform类?

  10. 10

    为什么我们必须对不可复制的类进行防御性复制

  11. 11

    在Java / Swing中,为什么我们将类用于动作侦听器?

  12. 12

    为什么我们需要在ASP.NET MVC中调用父类的空虚方法

  13. 13

    为什么我们需要将Apply和Applicative类型类分开?

  14. 14

    为什么我们需要Java中的Properties类?

  15. 15

    为什么forEach中的迭代器对于结构是不可变的,但对于类却是可变的?

  16. 16

    为什么是这个类可变的?

  17. 17

    Python,为什么我们可以创建类创建中未定义的类变量?

  18. 18

    为什么不同于类的其他成员,我们为什么需要定义类的静态变量?

  19. 19

    Java:为什么我们可以从非子类访问字段和方法时需要扩展类

  20. 20

    我们是否需要为Utility类创建接口?

  21. 21

    在TreeMap的情况下,如果将我们自己的类对象作为键传递,那么需要实现Comparable或Comparator的接口,为什么?

  22. 22

    什么是可变类。我们如何在C#中创建一个可变且不可变的类

  23. 23

    我们什么时候需要数据类?

  24. 24

    为什么我们在python中的每个方法上都需要相应的类函数?

  25. 25

    我们可以用C ++中的非模板类“包装”模板类吗?

  26. 26

    Android:扩展应用程序类。为什么我们需要实现单例模式?

  27. 27

    为什么我们在控制器类中添加 @ModelAttribute("r") Reg reg?

  28. 28

    为什么我们需要特定的类来处理请求和响应?

  29. 29

    为什么不可变类不能有 setter 方法?

热门标签

归档