📝 第10章测试

Executors工具类知识检测

题目数量
10题
建议时间
15分钟
及格分数
70分
难度等级
中级

选择题(每题10分)

1 关于Executors.newFixedThreadPool()的说法,哪个是正确的?
  • A. 线程数量会根据任务数量动态调整
  • B. 使用无界队列存储等待的任务
  • C. 空闲线程会在60秒后被回收
  • D. 适合执行大量短期任务
2 CachedThreadPool的特点不包括以下哪项?
  • A. 线程数量可以动态增长
  • B. 空闲线程60秒后回收
  • C. 使用有界队列限制任务数量
  • D. 适合I/O密集型任务
3 ScheduledExecutorService的scheduleAtFixedRate()和scheduleWithFixedDelay()的区别是?
  • A. scheduleAtFixedRate按固定频率执行,scheduleWithFixedDelay在任务完成后延迟
  • B. 两者没有区别,只是方法名不同
  • C. scheduleAtFixedRate只能执行一次,scheduleWithFixedDelay可以重复执行
  • D. scheduleAtFixedRate支持异常处理,scheduleWithFixedDelay不支持
4 为什么阿里巴巴Java开发手册建议避免使用Executors创建线程池?
  • A. Executors创建的线程池性能较差
  • B. Executors不支持自定义线程工厂
  • C. Executors创建的线程池无法关闭
  • D. 某些方法可能导致OOM,且缺乏参数透明性
5 以下哪种线程池最适合执行CPU密集型任务?
  • A. CachedThreadPool
  • B. FixedThreadPool(线程数=CPU核心数)
  • C. SingleThreadExecutor
  • D. ScheduledThreadPool

代码分析题(每题10分)

6 以下代码的输出结果是什么?
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(() -> {
    System.out.println("Task executed at: " + System.currentTimeMillis());
    try {
        Thread.sleep(3000); // 任务执行需要3秒
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
}, 0, 2, TimeUnit.SECONDS); // 每2秒执行一次
  • A. 每2秒准确执行一次任务
  • B. 任务会被跳过,因为执行时间超过了间隔时间
  • C. 任务会连续执行,没有间隔
  • D. 程序会抛出异常
7 以下自定义ThreadFactory的实现中,哪个是最佳实践?
  • A. 设置有意义的线程名称,使用AtomicInteger保证线程安全
  • B. 所有线程都设置为守护线程
  • C. 使用简单的计数器,不考虑线程安全
  • D. 不设置线程名称,使用默认名称
8 在高并发场景下,使用CachedThreadPool可能出现什么问题?
  • A. 任务执行速度变慢
  • B. 创建大量线程导致系统资源耗尽
  • C. 任务丢失
  • D. 线程池无法关闭
9 对于I/O密集型任务,线程池的核心线程数应该如何设置?
  • A. CPU核心数
  • B. CPU核心数 + 1
  • C. CPU核心数 * 2 或更多
  • D. 固定为1
10 线程池监控中,哪个指标最能反映线程池的负载情况?
  • A. 队列大小和活跃线程数
  • B. 最大线程数
  • C. 核心线程数
  • D. 线程池创建时间
返回章节
0分
请完成测试后查看结果
返回章节