Java 面试题
目录

Java 中常用的线程池有哪些?

· 约 3 分钟读完 · 第 72 / 274 章

推荐答案

在Java中,常用的线程池主要有以下几种:

  1. FixedThreadPool:固定大小的线程池,适用于负载较重的服务器环境。
  2. CachedThreadPool:可缓存的线程池,适用于执行很多短期异步任务的小程序,或者负载较轻的服务器。
  3. SingleThreadExecutor:单线程的线程池,适用于需要保证顺序执行各个任务,并且在任意时间点不会有多个线程活动的场景。
  4. ScheduledThreadPool:定时及周期性任务执行的线程池,适用于需要多个后台线程执行周期任务,同时需要限制线程数量的场景。
  5. WorkStealingPool:基于工作窃取算法的线程池,适用于计算密集型任务。

本题详细解读

FixedThreadPool

FixedThreadPool 是一个固定大小的线程池,线程池中的线程数量是固定的。当有新任务提交时,如果线程池中有空闲线程,则立即执行;如果没有空闲线程,则任务会被放入队列中等待。这种线程池适用于负载较重的服务器环境,可以有效地控制资源的使用。

CachedThreadPool

CachedThreadPool 是一个可缓存的线程池,线程池中的线程数量不固定,可以根据需要创建新线程,但在先前构建的线程可用时将重用它们。这种线程池适用于执行很多短期异步任务的小程序,或者负载较轻的服务器。

SingleThreadExecutor

SingleThreadExecutor 是一个单线程的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。这种线程池适用于需要保证顺序执行各个任务,并且在任意时间点不会有多个线程活动的场景。

ScheduledThreadPool

ScheduledThreadPool 是一个定时及周期性任务执行的线程池,它可以安排任务在给定的延迟后执行,或者定期执行。这种线程池适用于需要多个后台线程执行周期任务,同时需要限制线程数量的场景。

WorkStealingPool

WorkStealingPool 是基于工作窃取算法的线程池,它使用多个队列来减少线程间的竞争,适用于计算密集型任务。这种线程池在Java 8中引入,适用于需要处理大量计算任务的场景。