为什么开发中要使用线程池,而不是直接创建线程(如控制线程数量、复用线程、降低开销)?
开发中优先使用线程池而非直接创建线程,核心原因是线程池能优化线程管理、降低资源消耗、提高系统稳定性,而直接创建线程存在难以解决的缺陷,具体如下:
-
控制线程数量,避免资源耗尽:
直接创建线程时,若频繁执行任务(如每秒发起多个网络请求),会导致线程数量急剧增加。每个线程需占用一定内存(如 Java 线程默认栈大小 1MB)和 CPU 时间片,过多线程会:- 消耗大量内存,可能导致 OOM(内存溢出)。
- 引发频繁的 CPU 上下文切换(线程切换时保存/恢复状态的开销),降低系统吞吐量。
线程池通过corePoolSize
(核心线程数)和maximumPoolSize
(最大线程数)控制并发线程数量,超出最大线程数的任务会进入队列等待,避免线程爆炸。例如,设置最大线程数为 5,即使有 100 个任务,也只会同时运行 5 个线程,其余在队列中等待。
-
复用线程,降低创建/销毁开销:
线程的创建和销毁是昂贵的操作:创建线程需调用系统内核函数(如pthread_create()
),分配栈空间、注册线程等;销毁线程需回收资源、通知内核。每次任务都新建线程会导致大量时间浪费在创建/销毁上,尤其在高频任务场景(如 RecyclerView