Java高效并发(十二)----非阻塞同步方案实现线程安全

本文探讨了非阻塞同步的概念,作为对比于互斥同步(阻塞同步)的一种乐观并发策略。非阻塞同步依赖于冲突检测,如Java的CAS操作。在J.U.C并发包的atomic包中,AtomicInteger类通过CAS确保线程安全的自增操作。文章深入分析了AtomicInteger的incrementAndGet()方法的源码,解释了其在不同JDK版本下的实现,并提到了其内部依赖于sun.misc.Unsafe类的Native方法来完成CAS操作。
摘要由CSDN通过智能技术生成

前面我们讲了互斥同步和无同步方法实现线程安全,其中互斥同步也叫阻塞同步,接下来学习的是非阻塞同步实现线程安全

 非阻塞同步

互斥同步是一种悲观锁,认为竞争总是会发生,那么非阻塞同步就是一种基于冲突检测的乐观并发策略。这里就是用到之前说过的CAS操作检测冲突,如果没有冲突,CAS操作成功就继续执行操作,如果有冲突,就采取其他补救措施,一般是不断尝试CAS操作直到成功为止。这种乐观的并发策略的许多实现都不需要把线程挂起,所以叫做非阻塞同步方法。

非阻塞同步方法要求检测冲突和操作是原子操作。在J.U.C并发包中有一个atomic包,里面就实现了一些直接使用CAS操作的线程安全的类型,也就是这些类型保证了检测冲突和操作是原子性的。最常用的就是AtomicInteger类。

 AtomicInteger类

在这篇中https://blog.csdn.net/wangdongli_1993/article/details/81202561我们说过使用volatile修饰int型变量i,多个线程同时进行i++操作,这样不可以实现线程安全。但是如果我们把i定义成AtomicInteger类型的,使用AtomicInteger类中的incrementAndGet()方法来自增就是线程安全的。主要就是因为int型变量i++操作不是原子操作,而incrementAndGet()却通过不断的CAS操作实现了自增的原子性。接下来我们通过源码来分析这个类。下面是这个类中的一些方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值