第10章测试

Executors框架 - 检验你的学习成果

1. 关于Executors.newFixedThreadPool()的说法,哪个是正确的?

  • 线程池大小会根据任务数量动态调整
  • 使用LinkedBlockingQueue作为工作队列
  • 空闲线程会在60秒后被回收
  • 最大线程数可以超过核心线程数

2. newCachedThreadPool()最适合哪种场景?

  • 长时间运行的任务
  • 需要严格控制线程数量的场景
  • 执行大量短期异步任务
  • 需要保证任务执行顺序的场景

3. Future.get()方法的特点是什么?

  • 会阻塞当前线程直到任务完成
  • 立即返回结果,如果任务未完成则返回null
  • 只能获取成功的结果,不能获取异常
  • 不支持超时设置

4. Callable接口相比Runnable接口的优势是什么?

  • 执行效率更高
  • 占用内存更少
  • 支持泛型参数
  • 可以返回结果并抛出异常

5. CompletionService的主要作用是什么?

  • 提高任务执行效率
  • 按任务完成顺序获取结果
  • 自动重试失败的任务
  • 限制并发任务数量

6. 关于ExecutorService的关闭,正确的做法是?

  • 直接调用shutdownNow()强制关闭
  • 不需要手动关闭,JVM会自动处理
  • 先调用shutdown(),再用awaitTermination()等待
  • 只调用shutdown()就足够了

7. newSingleThreadExecutor()的特点是什么?

  • 保证任务按提交顺序执行
  • 可以并行执行多个任务
  • 适合CPU密集型任务
  • 线程异常后不会重新创建

8. 在生产环境中使用Executors的建议是?

  • 优先使用newCachedThreadPool
  • 总是使用newFixedThreadPool
  • Executors提供的线程池都很安全
  • 建议手动配置ThreadPoolExecutor