[英]Why do we need Atomic* classes if wrapper classes are already immutable?
我最近遇到了java.util.concurrent.atomic包中的原子类。 据我所知,不可变类本质上是默认的线程安全,所以我们不需要同步它们。 后来我才知道Integer,Boolean,Character等包装类本质上是不可变的,为什么我们需要像AtomicInteger或AtomicLong这样的Atomic *类。 另外,请解释什么是AtomicReference 。
这是一个关于compareAndSet
原理的一个很好的问题。
来自文档:
阅读atomic / volatile / synchronized将帮助您保持它们之间的差异。
你有没有想过当我有一个Integer(1)
,我怎么能把它改成Integer(2)
,整数是不可变的。所以我需要创建一个新的并设置它的值,但这个过程不是原子的。
当某些东西是可变的时,原子性的概念就来了。 我们希望修改字段/变量(可以是多步,读取 - >更新 - >写入)作为原子操作的操作。 因此,在多线程场景中,不应存在任何数据损坏。 java.util.concurrent.atomic包为我们做了。 包装类是不可变的,我们无法修改它,需要创建一个新实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.