C#转Java之路之二:多线程原子变量

本文探讨了Java中synchronized与volatile两种并发控制机制的区别。synchronized作为悲观锁,可能引发较多线程上下文切换,而volatile通过提供轻量级内存可见性确保数据一致性,性能更优。此外,介绍了Java提供的原子操作类及其使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多线程操作会带来不一致性,为了实现一直性。我们可以用关键字:synchronized同步对象或者volatile轻量级、内存可见性。

两个关键字使用对比:

1、synchronized比较重,属于悲观锁机制,造成冲突大,线程间的上下文切换多,资源浪费。

比如我们就实现计数操作。

2、volatile轻量级内存可见性,非阻塞式,性能更高。

java已经实现了很多原子操作类:在java.util.concurrent包里

 AtomicBoolean:原子Boolean类型
 AtomicInteger:原子Integer类型
 AtomicLong:原子Long类型
 AtomicReference:原子引用类型

及相应的数组类型:

AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray

为了便于以原子方式更新对象中的字段,还有如下的类:
    AtomicIntegerFieldUpdater
    AtomicLongFieldUpdater
    AtomicReferenceFieldUpdater
AtomicReference还有两个类似的类,在某些情况下更为易用:

    AtomicMarkableReference
    AtomicStampedReference

实现原理就是用到volatile关键字声明变量。

转载于:https://www.cnblogs.com/zhaoguo435/p/6607057.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值