MST

星途 面试题库

面试题:Java中Executors框架下线程池的创建方式及应用场景

请阐述Java Executors框架中创建线程池的常见方式,如`Executors.newFixedThreadPool`、`Executors.newSingleThreadExecutor`、`Executors.newCachedThreadPool`等,并说明它们各自适用的应用场景。
24.5万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

1. Executors.newFixedThreadPool(int nThreads)

  • 创建方式:创建一个固定线程数量的线程池,线程池中的线程数量始终保持为nThreads。当有新任务提交时,如果线程池中有空闲线程,则直接使用;如果没有空闲线程,则任务会被放入任务队列等待,直到有线程可用。
  • 适用场景:适用于对线程数量有严格限制,且任务执行时间相对较长的场景。比如,数据库连接池,因为数据库连接数量有限,过多的并发访问可能导致数据库性能下降甚至崩溃,使用固定线程数量的线程池可以有效控制并发访问量,避免数据库过载。

2. Executors.newSingleThreadExecutor()

  • 创建方式:创建一个只有单个线程的线程池,所有任务按照提交顺序依次执行。当该线程执行完一个任务后,才会从任务队列中取出下一个任务执行。
  • 适用场景:适用于需要顺序执行任务,并且不希望有多个线程并发执行的场景。例如,一些需要按顺序处理文件的任务,或者对资源访问需要严格串行化的场景,以避免资源竞争问题。

3. Executors.newCachedThreadPool()

  • 创建方式:创建一个可缓存的线程池,如果线程池中有空闲线程则复用空闲线程,如果没有空闲线程则创建新线程执行任务。当线程空闲时间超过60秒时,线程会被回收。
  • 适用场景:适用于任务执行时间短、提交任务频率高且任务数量变化较大的场景。比如,处理网页请求,网页请求通常处理时间较短,但并发量可能会在短时间内有较大波动,使用可缓存线程池可以根据实际情况动态调整线程数量,提高系统的响应速度和资源利用率。