📝 第4章测试:volatile关键字
检验你对volatile内存语义和应用的掌握程度
10道题目
建议时间:15分钟
及格分数:70分
1
关于volatile关键字的特性,以下说法正确的是?
A. volatile保证变量的原子性、可见性和有序性
B. volatile只保证变量的可见性和有序性,不保证原子性
C. volatile只保证变量的原子性
D. volatile与synchronized功能完全相同
2
volatile变量的可见性是通过什么机制实现的?
A. 锁机制
B. 内存屏障和缓存一致性协议
C. 线程本地存储
D. 原子操作
3
以下哪种内存屏障的开销最大?
A. LoadLoad屏障
B. LoadStore屏障
C. StoreLoad屏障
D. StoreStore屏障
4
在双重检查锁定模式中,为什么instance变量必须声明为volatile?
A. 为了保证原子性
B. 为了防止指令重排序导致获得未完全初始化的对象
C. 为了提高性能
D. 为了实现互斥访问
5
根据happens-before规则,以下代码中线程B能否看到x=1的修改?
class Example { int x = 0; volatile boolean flag = false; // 线程A执行 void writerA() { x = 1; // 1 flag = true; // 2 } // 线程B执行 void readerB() { if (flag) { // 3 int y = x; // 4 } } }
A. 能,因为volatile保证了happens-before关系
B. 不能,因为x不是volatile变量
C. 不确定,取决于CPU缓存
D. 不能,因为没有同步机制
6
以下哪种场景最适合使用volatile?
A. 计数器的递增操作
B. 状态标志变量
C. 多个变量的一致性更新
D. 复杂的业务逻辑保护
7
volatile写操作会在哪些位置插入内存屏障?
A. 只在写操作前插入StoreStore屏障
B. 只在写操作后插入StoreLoad屏障
C. 写操作前插入StoreStore屏障,写操作后插入StoreLoad屏障
D. 不插入任何内存屏障
8
以下关于volatile和synchronized性能比较的说法,正确的是?
A. volatile的性能总是比synchronized好
B. synchronized的性能总是比volatile好
C. volatile通常比synchronized轻量级,但不能替代所有synchronized的功能
D. 两者性能完全相同
9
以下代码中,哪个操作不是原子的,需要额外的同步措施?
A. volatile boolean flag = true;
B. volatile int count = 0;
C. volatile int count; count++;
D. volatile Object obj = new Object();
10
在什么情况下应该考虑使用volatile而不是synchronized?
A. 需要保证多个操作的原子性时
B. 只需要保证变量可见性,且是读多写少的场景
C. 需要互斥访问共享资源时
D. 需要等待和通知机制时
提交答案
0
正在计算分数...
返回章节
返回目录