java中阻塞的概念_Java并发基石——所谓“阻塞”:ObjectMonitor和AQS(2)

本文主要探讨Java并发编程中的AQS(AbstractQueuedSynchronizer)机制,包括其介绍、主要概念和使用方式。AQS作为Java线程调度的一种实现,与ObjectMonitor不同,它依赖于sun.misc.Unsafe类,用于实现线程的park和unpark操作。AQS的核心是state状态,用于协调队列中节点的调度。同时,文章也提到了AQS与LockSupport类的关系,以及它们如何在Java中实现同步和线程阻塞。
摘要由CSDN通过智能技术生成

3、AQS

上文我们较为详细的介绍了Java线程调度中的Object

Monitor机制以及其工作情况,本文我们开始介绍Java线程调度中的另一种实现机制AQS,包括它的使用方式和底层工作原理。

3.1、AQS介绍

a4c26d1e5885305701be709a3d33442f.png

”技术的封装。

同步多线程(SMT)

技术是一种硬件层面的技术,具体来说是直接由CPU提供的技术实现。而Java语言中,使用了sun.misc.Unsafe类完成了对这个技术的调用封装。一旦使用Unsafe中的park调用,则当我们使用jstack查看可能的线程阻塞状态时,就会看到类似WATING(parking)这个的提示信息。

接着AQS队列的实现还直接依赖于java中的sun.misc.Unsafe类,这个类在本专题之前的文章中也同样介绍过——它是Java语言中实现乐观锁CAS技术的基础,其底层完全依赖于java本地方法JNI完成操作系统级别的调用。另外。如果读者自己观察源代码就会发现,实际上LockSupport类依赖的底层类也是sun.misc.Unsafe,所以Java中ASQ队列技术的整个依赖关系可以如下图所示:

a4c26d1e5885305701be709a3d33442f.png

3.2、AQS的主要概念和使用方式

3.2.1、AbstractQueuedSynchronizer中的主要概念

要使用好AbstractQueuedSynchronizer,就需要了解AbstractQueuedSynchronizer中几个关键概念。

AbstractQueuedSynchronizer中的state状态:

a4c26d1e5885305701be709a3d33442f.png

上文已经提到AbstractQueuedSynchronizer的抽象类中保持了一个任务队列,并且在AbstractQueuedSynchronizer中使用了一个“private

volatile int

state;”变量,协调这个队列中各个节点的调度(下文会详细讲述如何进行协调)。AbstractQueuedSynchronizer中取得或者设置state状态的方法包括getState()、setState()和compareAndSetState()。注意:AQS队列的state状态初始化值为0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值