第8章测试:原子类
测试你对Java原子类、CAS算法和ABA问题的理解程度
1. 下列关于AtomicInteger的说法,哪个是正确的?
AtomicInteger使用synchronized关键字保证线程安全
AtomicInteger基于CAS算法实现无锁操作
AtomicInteger不能保证线程安全
AtomicInteger只能用于单线程环境
2. CAS算法包含哪三个操作数?
内存位置、当前值、新值
内存位置、预期原值、新值
线程ID、内存位置、新值
锁对象、内存位置、新值
3. 什么是ABA问题?
一个值从A变成B,然后又变回A,CAS操作无法检测到这种变化
三个线程同时访问同一个变量导致的问题
AtomicBoolean的一个bug
CAS操作失败时抛出的异常
4. 如何解决ABA问题?
使用synchronized关键字
使用AtomicStampedReference引入版本号
使用volatile关键字
使用ReentrantLock
5. 下列哪个方法会先获取当前值,然后再进行递增操作?
incrementAndGet()
getAndIncrement()
addAndGet(1)
compareAndSet()
6. AtomicReference主要用于什么场景?
基本数据类型的原子操作
引用类型的原子操作
数组的原子操作
字段的原子更新
7. 相比synchronized,原子类的主要优势是什么?
更好的可读性
无锁操作,避免线程阻塞,性能更好
更少的内存占用
支持更多的数据类型
8. 在什么情况下应该考虑使用AtomicStampedReference而不是AtomicReference?
需要更好的性能时
需要检测值的变化历史,避免ABA问题时
需要存储更多数据时
需要支持多种数据类型时
提交答案
返回章节
课程目录