1. ArrayBlockingQueue 的有界单锁实现
ArrayBlockingQueue 的有界单锁实现是什么?
- 单锁结构
- 有界数组
- 条件变量
ArrayBlockingQueue 用固定数组(有界)+ 单一 ReentrantLock + 两个 Condition(notEmpty/notFull)。put 时获取锁,若数组满则 notFull.await 等待,否则写入并 notEmpty.signal;take 时获取锁,若空则 notEmpty.await,否则取出并 notFull.signal。单锁保护所有操作,保证线程安全。有界数组固定容量,可实现背压。缺点是单锁使 put 与 take 互斥(性能低于双锁的 LinkedBlockingQueue),但实现简单、有界明确。
单锁 + 数组 + 双条件是有界队列的经典实现。单锁保证互斥,双条件保证精确唤醒,有界保证背压。