返回章节

🔒 第5章测试:同步机制详解

测试你对synchronized、死锁、wait/notify机制的理解

10道题目 建议时间:15分钟 及格分数:70分
第1题 (10分)
关于synchronized关键字的说法,哪个是正确的?
  • A. synchronized只能修饰方法,不能修饰代码块
  • B. synchronized基于对象监视器(Monitor)实现
  • C. synchronized不会释放锁,直到程序结束
  • D. synchronized不能防止死锁的发生
第2题 (10分)
以下代码中,哪个synchronized使用方式锁定的是类对象?
public class Test { public void method1() { synchronized(this) { /* A */ } } public synchronized void method2() { /* B */ } public static synchronized void method3() { /* C */ } public void method4() { synchronized(new Object()) { /* D */ } } }
  • A. 选项A
  • B. 选项B
  • C. 选项C
  • D. 选项D
第3题 (10分)
死锁发生的四个必要条件不包括以下哪一个?
  • A. 互斥条件
  • B. 请求和保持条件
  • C. 不可剥夺条件
  • D. 线程优先级条件
第4题 (10分)
关于wait()和notify()方法的说法,哪个是错误的?
  • A. wait()方法必须在synchronized块中调用
  • B. wait()方法会释放当前持有的锁
  • C. notify()方法会立即释放锁
  • D. notifyAll()会唤醒所有等待的线程
第5题 (10分)
在生产者消费者模式中,为什么要在while循环中使用wait()而不是if语句?
  • A. while循环性能更好
  • B. 防止虚假唤醒(spurious wakeup)
  • C. if语句语法不正确
  • D. while循环更容易理解
第6题 (10分)
以下哪种方式可以有效预防死锁?
  • A. 增加更多的线程
  • B. 为所有锁定义全局顺序
  • C. 使用更多的synchronized块
  • D. 减少同步代码的执行时间
第7题 (10分)
synchronized的锁升级过程的正确顺序是?
  • A. 无锁 → 重量级锁 → 轻量级锁 → 偏向锁
  • B. 无锁 → 偏向锁 → 轻量级锁 → 重量级锁
  • C. 偏向锁 → 无锁 → 轻量级锁 → 重量级锁
  • D. 轻量级锁 → 偏向锁 → 无锁 → 重量级锁
第8题 (10分)
关于锁的粒度控制,以下说法正确的是?
  • A. 粗粒度锁总是比细粒度锁性能更好
  • B. 细粒度锁可以提高并发性但增加复杂性
  • C. 锁的粒度不影响程序性能
  • D. 应该总是使用最细粒度的锁
第9题 (10分)
以下代码可能导致什么问题?
public class Counter { private int count = 0; public void increment() { count++; // 没有同步 } public int getCount() { return count; // 没有同步 } }
  • A. 编译错误
  • B. 运行时异常
  • C. 线程安全问题,可能出现数据竞争
  • D. 内存泄漏
第10题 (10分)
在多线程环境下,以下哪种做法是推荐的?
  • A. 尽可能使用大范围的synchronized块
  • B. 优先使用notify()而不是notifyAll()
  • C. 在synchronized块中使用Thread.sleep()
  • D. 保持同步代码块尽可能小和快