说实话,我在准备探究Java线程同步的实现原理时,并没有听说过AbstractQueuedSynchronizer。所以作为一个昨天才第一次听说的自旋锁实现方式,AQS成功地吸引了我。AQS的实现基于CLH锁(Craig, Landin, and Hagersten Lock),这种数据结构的特点在于把“临界数据”和“进程控制”同时实现。相比于我以前看到的方法,这种实现明显更加高效和简洁。在Java concurrent库中,AQS是最重要的基础之一。
-
AbstractQueuedSynchronizer的原理
一个同步线程工具大致要实现以下三个功能:
- 原子地管理同步状态
- 阻塞和唤醒线程
- 管理线程队列
对于第一个功能,AQS使用了一个int型的字段来管理锁的状态。类似于物理硬件的compareAndSwap原子指令,Java… 【查看更多】
最新评论