搜索
写经验 领红包
 > 生活

面试aop的理解(如何理解面试技巧)

导语:面试题梳理:怎么理解AQS

是什么?

是抽象队列同步器,它是Java并发工具的基础,采用乐观锁,通过CAS与自旋轻量级的获取锁。

详细包括什么?

AQS维护了一个用volatile标记的共享资源变量state和一个先进先出的等待队列。

其中state标识一个共享资源,在不同条件下值所代表的的意义不同,比如

1. 在独占锁时0和1两个值,代表是否锁定资源

2. 在可重入锁时,代表重入的次数

3. 在读写锁时,高16位代表读锁状态,低16位代表写锁状态

4. 在信号量时,用来代表信号量

等待队列是一个基于链表实现的双端队列,当一个线程竞争资源失败时,就会将等待资源的线程封装成一个Node节点通过CAS操作插入到队列尾部。

同步队列

AQS的同步队列,是一个基于链表实现的双端队列。

每个Node节点都包括了线程持有、节点等待状态、共享or独占标记等信息。

同步队列包括2个优点:

第一:基于先进先出,保证了公平性

第二:非阻塞队列,通过自旋锁和CAS保证节点安全的插入和移除的原子性,实现无锁快速插入。

为什么是双端队列?

主要是线程状态检查,因为当后继节点的线程被唤醒后需要检查自己的前驱节点是否是头节点,为了能让后继节点获取到其前驱节点。

免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小芦创作整理编辑!