← Retour à la page précédente

Parler des pools de threads Java en entretien pendant 20 minutes

Expliquer la réutilisation des threads, le coût d'un pool trop grand et son dimensionnement selon les tâches.

什么是线程池?

线程池是池化技术实现的一种,类似的还有数据库连接池、对象池、内存池等等。 </br> 池化技术的核心思想是实现资源的复用,通过该技术,减少了资源的频繁创建和销毁开销,提高了系统性能和资源利用率。实现的核心是确保资源在不需要时被返回池中,以便下次使用;关键步骤包括资源的创建、获取、释放和管理。

线程池设置过大会导致什么问题?

若线程池设置过大,

  1. 如果没有任务需要使用线程,可能会导致内存耗尽,因为每个线程在创建时都会占用一定的内存资源,包括线程栈和线程本地存储。
  2. 如果有过多的线程并发,CPU可能会因为频繁地进行线程上下文切换而过载,又或者发生资源的竞争加剧,增加任务的等待时间,再或者线程管理复杂,GC回收时间长等问题

所以线程池一般根据任务类型的不同来设置大小,例如计算密集型任务则cpu数量+1,IO密集型任务则cpu数量*(1+w/c),w为等待时间,c为计算时间,以此类推。

使用什么设计模式实现线程池?

实现线程池时会结合多个设计模式来实现线程池的功能,主要使用的是对象池模式(Object Pool Pattern),该模式没有被标准化为一个经典的设计模式,但它被广泛用于管理资源的创建和复用,如线程池、数据库连接池等等。