面试题答案
一键面试Executors.newFixedThreadPool
- 资源耗尽场景:
- 问题:当任务需要的资源(如内存、文件句柄等)超出系统可用资源时,若线程池中的线程持续执行这些高资源消耗任务,系统资源会逐渐耗尽。由于
newFixedThreadPool
线程数量固定,即使部分任务因资源不足执行失败,线程也不会减少,其他任务仍会持续尝试获取资源,进一步加剧资源紧张。例如,若任务需要大量内存进行数据处理,而系统内存有限,随着任务不断执行,内存被耗尽,后续任务会因无法分配内存而失败。 - 对系统稳定性影响:系统可能会出现卡顿、响应缓慢甚至崩溃的情况。因为资源耗尽后,不仅与线程池相关的任务无法正常执行,整个系统中依赖这些资源的其他进程或服务也会受到影响,导致系统整体稳定性严重下降。
- 问题:当任务需要的资源(如内存、文件句柄等)超出系统可用资源时,若线程池中的线程持续执行这些高资源消耗任务,系统资源会逐渐耗尽。由于
- 任务堆积场景:
- 问题:如果任务提交速度大于线程池处理速度,由于
newFixedThreadPool
线程数量固定,任务会在任务队列中不断堆积。当任务队列达到其容量上限(如果是有界队列),后续提交的任务可能会根据拒绝策略处理(如抛异常、丢弃任务等)。即使是无界队列,随着任务不断堆积,也会占用大量内存,导致内存资源紧张。 - 对系统稳定性影响:任务堆积会使任务响应时间变长,用户体验变差。同时,内存占用过高可能导致系统出现内存溢出错误,影响系统的稳定运行,严重时可能使整个应用程序崩溃。
- 问题:如果任务提交速度大于线程池处理速度,由于
Executors.newSingleThreadExecutor
- 资源耗尽场景:
- 问题:与
newFixedThreadPool
类似,当任务需要大量资源时,单线程持续执行任务,资源会逐渐被耗尽。但由于只有一个线程,资源耗尽的速度相对可能会慢一些。不过,一旦资源耗尽,任务执行失败后,由于只有一个线程,后续任务也无法继续正常获取资源执行。例如,若任务需要频繁读写大文件,占用大量文件句柄资源,当文件句柄资源耗尽后,后续的文件读写任务就会失败。 - 对系统稳定性影响:虽然只有一个线程,但资源耗尽仍会导致依赖该资源的任务无法执行,影响系统的部分功能,降低系统稳定性。如果该线程执行的任务是关键业务逻辑,可能会导致整个业务流程中断,影响系统的正常运行。
- 问题:与
- 任务堆积场景:
- 问题:由于只有一个线程处理任务,任务提交速度很容易大于处理速度,任务会在任务队列中大量堆积。与
newFixedThreadPool
一样,有界队列达到上限后按拒绝策略处理任务,无界队列则会持续占用内存。而且单线程处理任务,堆积速度会更快,因为处理能力有限。 - 对系统稳定性影响:任务响应时间会极长,几乎所有任务都处于等待执行状态,用户等待时间过长,严重影响用户体验。大量任务堆积占用内存可能导致内存相关问题,如内存溢出,进而影响系统整体稳定性,甚至导致应用程序崩溃。
- 问题:由于只有一个线程处理任务,任务提交速度很容易大于处理速度,任务会在任务队列中大量堆积。与