AQS理论的数据结构是什么
时间: 2023-09-24 18:05:11 浏览: 167
AQS(AbstractQueuedSynchronizer)是Java中用于实现锁和同步器的框架,其核心原理是基于FIFO队列和状态位来实现线程的阻塞和唤醒。
AQS使用了一个FIFO的双向队列来保存被阻塞的线程,同时使用一个整型的状态位来表示共享资源的状态(例如锁的状态),并提供了一些操作这个状态位的方法。线程在获取锁时,会首先尝试获取锁的状态位,如果可以获取到,说明锁是可用的,线程可以继续执行;如果获取不到,说明锁已经被占用,线程就会被阻塞,并加入到等待队列中。当锁的状态位被释放时,AQS会自动唤醒等待队列中的第一个线程,并将线程从队列中移除。
AQS的数据结构是一个双向队列,每个节点(Node)代表一个被阻塞的线程。Node中包含了一个等待状态(waitStatus)和一个指向前驱节点的指针(prev),以及一个指向后继节点的指针(next)。当线程被阻塞时,它会创建一个节点并加入到等待队列中,当锁被释放时,AQS会自动将队列中的第一个节点唤醒并移出队列。AQS通过维护这个双向队列和状态位来实现锁和同步器的功能。
阅读全文