返回章节

🧪 第13章测试:同步工具类

测试你对CountDownLatch、CyclicBarrier、Semaphore等同步工具类的掌握程度

1
关于CountDownLatch的描述,以下哪个是正确的?
解析:
CountDownLatch是一次性的同步工具,计数器的值只能在构造方法中初始化一次,之后没有任何机制再次对其设置值。当CountDownLatch使用完毕后,它不能再次被使用。
2
CyclicBarrier与CountDownLatch的主要区别是什么?
解析:
CyclicBarrier的主要特点是可以重复使用。当所有线程都到达屏障点后,屏障会自动重置,可以进行下一轮的同步。而CountDownLatch是一次性的。
3
Semaphore主要用于什么场景?
解析:
Semaphore是一个计数信号量,主要用于控制同时访问某个资源的线程数量。例如数据库连接池、线程池等场景,通过许可证机制来限制并发访问。
4
Exchanger适用于以下哪种场景?
解析:
Exchanger是专门用于两个线程之间交换数据的同步工具。第一个线程会等待第二个线程,直到两个线程都准备好数据时才进行交换。
5
Phaser相比CyclicBarrier的优势是什么?
解析:
Phaser的主要优势是支持动态调整参与同步的线程数量,可以在运行时注册和注销参与者,还支持分层结构来提高性能。
6
以下哪个方法用于释放Semaphore的许可?
解析:
release()方法用于释放一个许可,将其返回给信号量。acquire()用于获取许可,await()是CountDownLatch的方法,countDown()也是CountDownLatch的方法。
7
在CyclicBarrier中,当所有线程都到达屏障点时会发生什么?
解析:
当所有线程都到达CyclicBarrier的屏障点时,如果构造时指定了屏障动作(Runnable),会先执行该动作,然后释放所有等待的线程,屏障重置可以继续使用。
8
CountDownLatch的await()方法的作用是什么?
解析:
await()方法使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。它不会改变计数器的值,只是等待计数器变为0。