为什么需要线程池
线程池是为了提高多线程应用程序的性能和可管理性而设计的。具体来说,使用线程池有以下几个好处:
-
降低线程创建和销毁的开销:创建和销毁线程是比较昂贵的操作,线程池可以在应用程序启动时预先创建一定数量的线程,并将它们放入池中以供复用,从而避免频繁地创建和销毁线程,减少了开销。
-
提高系统处理能力:线程池可以根据系统的处理能力和负载情况动态地调整线程数量,从而最大限度地利用系统资源,提高并发执行能力。
-
控制并发线程数:线程池可以限制同时执行的线程数量,避免因为创建大量线程而导致系统资源耗尽和性能下降的问题。
-
提供线程管理和监控功能:线程池提供了一些管理和监控线程的接口,可以方便地对线程进行管理、监控和调优。例如,可以设置线程池的最大线程数、核心线程数、线程的存活时间等参数,还可以监控线程的执行状态、完成状态以及任务的执行进度等信息。
综上所述,线程池可以提高多线程应用程序的性能、可管理性和可靠性,使得多线程编程更加高效和稳定。
怎么创建线程池
规范建议使用手动创建,new ThreadPoolExecutor()
怎么确定合适的线程数
1、CPU密集型:CPU计算多,任务结束时间块,合适线程数=CPU核心数
2、IO密集型:IO等待,需要让出CPU,CPU空闲机会多,因此增加线程数,合适线程数=CPU核心数 * 2
3、混合型:利用公式
合适线程数 = CPU核心数 x (线程等待时间 和 CPU执行时间 + 1)
线程等待时间可以是IO操作、查询数据库
CPU执行时间是指线程在CPU上执行的时间
动态线程池实现
dynamic-tp,动态刷新配置、动态更新阻塞队列,直接替换队列