与面试官聊20分钟Java线程池
Java线程池进阶
与面试官聊20分钟Java线程池
什么是线程池?
线程池是池化技术实现的一种,类似的还有数据库连接池、对象池、内存池等等。 </br> 池化技术的核心思想是实现资源的复用,通过该技术,减少了资源的频繁创建和销毁开销,提高了系统性能和资源利用率。实现的核心是确保资源在不需要时被返回池中,以便下次使用;关键步骤包括资源的创建、获取、释放和管理。
线程池设置过大会导致什么问题?
若线程池设置过大,
- 如果没有任务需要使用线程,可能会导致内存耗尽,因为每个线程在创建时都会占用一定的内存资源,包括线程栈和线程本地存储。
- 如果有过多的线程并发,CPU可能会因为频繁地进行线程上下文切换而过载,又或者发生资源的竞争加剧,增加任务的等待时间,再或者线程管理复杂,GC回收时间长等问题
所以线程池一般根据任务类型的不同来设置大小,例如计算密集型任务则cpu数量+1,IO密集型任务则cpu数量*(1+w/c),w为等待时间,c为计算时间,以此类推。
使用什么设计模式实现线程池?
实现线程池时会结合多个设计模式来实现线程池的功能,主要使用的是对象池模式(Object Pool Pattern),该模式没有被标准化为一个经典的设计模式,但它被广泛用于管理资源的创建和复用,如线程池、数据库连接池等等。
本文由作者按照 CC BY 4.0 进行授权