第16章测试

AQS抽象队列同步器 - 检验你的学习成果

问题 1
AQS中的state变量使用什么关键字修饰以保证可见性?
解析:

AQS中的state变量使用volatile关键字修饰,确保了多线程环境下的可见性。volatile保证了一个线程对state的修改能够立即被其他线程看到。

问题 2
AQS使用什么设计模式来定义同步器的基本框架?
解析:

AQS使用模板方法模式,定义了同步器的骨架算法,而具体的同步语义由子类实现。AQS提供了acquire、release等模板方法,子类实现tryAcquire、tryRelease等具体方法。

问题 3
在AQS的等待队列中,Node节点的waitStatus为SIGNAL(-1)表示什么含义?
解析:

SIGNAL状态表示当前节点的后继节点需要被唤醒。当一个节点释放同步状态时,如果其waitStatus为SIGNAL,就需要唤醒其后继节点。

问题 4
以下哪个同步器使用的是AQS的共享模式?
解析:

CountDownLatch使用共享模式,多个线程可以同时等待计数器归零。而ReentrantLock、写锁、Mutex都是独占模式,同一时刻只能有一个线程获取。

问题 5
在自定义同步器时,以下哪个方法是必须实现的?
解析:

在实现独占模式的同步器时,必须重写tryAcquire()和tryRelease()方法。acquire()、addWaiter()、unparkSuccessor()等都是AQS提供的模板方法,不需要子类实现。