全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页

JAVA线程安全与同步机制专题测试

20 题 60 分钟 难度:

考察知识点

知识点模块题目数量题目编号
synchronized关键字3道Q001-Q003
volatile关键字3道Q005-Q007
Lock接口与ReentrantLock4道Q009-Q012
原子类Atomic2道Q013-Q014
线程安全集合3道Q017,Q018,Q020
同步工具类3道Q021,Q022,Q024
综合对比2道Q029-Q030
1
判断题

synchronized关键字修饰普通方法时,锁对象是当前实例对象(this);修饰静态方法时,锁对象是当前类的Class对象。

A

B

2
单选题

关于Java中synchronized关键字的锁升级过程,以下说法正确的是?

A

synchronized只能使用重量级锁,每次都会阻塞线程

B

锁升级顺序是:无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁,且只能升级不能降级

C

锁升级后性能会越来越好

D

偏向锁在竞争激烈时性能最优

3
多选题

关于synchronized关键字,以下说法正确的有?

A

synchronized是Java内置关键字,会自动释放锁

B

synchronized可以修饰代码块、方法和接口

C

synchronized是可重入锁,同一个线程可以多次获取同一把锁

D

synchronized可以响应中断,线程等待锁时可以被中断

4
判断题

volatile关键字可以保证变量的可见性,但不能保证复合操作的原子性。

A

B

5
单选题

关于volatile关键字的内存语义,以下说法正确的是?

A

volatile变量的写操作会插入StoreStore屏障,防止上面的普通写与下面的volatile写重排序

B

volatile变量的读操作会插入LoadLoad屏障,防止下面的普通读与上面的volatile读重排序

C

volatile只能保证可见性,不能禁止任何类型的指令重排序

D

volatile变量不需要从主内存读取,每个线程都有自己的副本

6
多选题

以下哪些场景适合使用volatile关键字?

A

状态标志位,如控制线程循环退出的boolean变量

B

单例模式中双重检查锁定的实例变量

C

多线程环境下对计数器进行递增操作

D

独立观察,如定期更新某个值供其他线程读取

7
判断题

ReentrantLock实现了Lock接口,它支持公平锁和非公平锁两种模式,并且是可重入锁。

A

B

8
单选题

关于Lock接口的方法,以下说法错误的是?

A

lock()方法获取锁,如果锁不可用则阻塞等待

B

tryLock()方法尝试获取锁,立即返回结果,不会阻塞

C

lockInterruptibly()方法获取锁时可响应中断

D

newCondition()方法返回一个Object对象用于等待/通知机制

9
多选题

关于synchronized和ReentrantLock的区别,以下说法正确的有?

A

synchronized是Java关键字,ReentrantLock是JUC包下的类

B

synchronized自动释放锁,ReentrantLock需要手动释放锁

C

synchronized只能是非公平锁,ReentrantLock可以选择公平锁或非公平锁

D

synchronized和ReentrantLock都是可重入锁

10
填空题

ReentrantLock的底层实现依赖于______(AbstractQueuedSynchronizer)框架,它使用一个FIFO队列来管理等待获取锁的线程。

11
判断题

Java中的原子类(如AtomicInteger)通过CAS(Compare-And-Swap)机制实现原子操作,CAS操作不需要加锁就能保证线程安全。

A

B

12
单选题

关于CAS操作的ABA问题,以下说法正确的是?

A

ABA问题是指值从A变成B再变成A,CAS检测不到变化可能产生错误

B

ABA问题只能通过加锁解决,无法通过乐观锁方式解决

C

Java的AtomicStampedReference通过加锁解决ABA问题

D

ABA问题在所有场景下都会导致数据错误

13
判断题

Java 8中的ConcurrentHashMap使用了CAS+synchronized来保证线程安全,放弃了Java 7中的分段锁设计。

A

B

14
单选题

关于CopyOnWriteArrayList,以下说法错误的是?

A

写操作时会复制整个数组,适合读多写少的场景

B

迭代器遍历时不会抛出ConcurrentModificationException

C

写操作的性能很高,和ArrayList相当

D

迭代器遍历时不能通过迭代器的remove方法删除元素

15
填空题

ConcurrentHashMap在Java 8中,当链表长度超过______且数组长度超过64时,会将链表转换为红黑树以提高查询效率。

16
判断题

CountDownLatch是一次性的,计数器减到0后不能重置,而CyclicBarrier可以重置并重复使用。

A

B

17
单选题

以下场景中,最适合使用CountDownLatch的是?

A

10个线程并发执行,要求所有线程都到达某个点后再一起继续执行

B

主线程等待5个子线程完成后再执行后续逻辑

C

限制同一时间最多有3个线程访问某个资源

D

多个线程周期性地执行任务,每轮都互相等待

18
多选题

关于CountDownLatch、CyclicBarrier和Semaphore,以下说法正确的有?

A

CountDownLatch的计数器只能递减,不能递增

B

CyclicBarrier可以指定一个Runnable任务,在所有线程到达屏障后执行

C

Semaphore的tryAcquire()方法在许可不足时返回false,不会阻塞

D

这三个工具类都位于java.util.concurrent包中

19
单选题

关于synchronized和volatile的内存语义,以下说法正确的是?

A

volatile只能保证可见性,synchronized可以保证可见性和原子性

B

volatile和synchronized都会造成线程阻塞

C

volatile关键字可以修饰方法

D

synchronized不能禁止指令重排序

20
单选题

在读多写少的场景下,以下哪种同步机制性能最优?

A

synchronized关键字

B

ReentrantLock

C

ReentrantReadWriteLock

D

AtomicReference

← 上一个试卷 JAVA泛型详解专题测试
下一个试卷 → JAVA网络编程基础专题测试

📝 发现内容有误?点击此处直接编辑

想参加完整模拟考试?
小程序提供计时考试、自动评分和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库