该文章主要是回答 Android线程与线程池面试题总结博文中3.1节中的问题。
1. 为什么需要线程池?
在Android应用中,为了避免阻塞主线程(UI线程),导致界面卡顿甚至ANR,我们必须将耗时的操作(如网络请求、复杂计算、大量I/O操作)放在自线程中执行。
最直接的方法就是new Thread(() -> {…}).start()。 然而,如果任务数量非常多,这种“来一个任务创建一个线程”的简单模式会带来巨大的问题。因此,我们需要一种更高效、更可控的机制来管理这些后台任务,这就是线程池被引入的原因。
核心目的: 为了对多个并发执行的线程进行统一、高校的管理和调度,以避免因无限制创建线程而导致的系统性能问题。
2. 直接创建线程的缺点
直接使用 new Thread() 的方式主要有以下三大缺点:
a. 资源消耗大
- 内存开销: 每个线程都需要为其分配独立的栈内存(在 Java 中默认是 1MB 左右)。大量线程会快速消耗应用的内存资源,可能引发 OOM。
- CPU 开销: 线程的创建、销毁以及线程间的上下文切换(Context Switching)会占用大量的 CPU 时间。当线程数量远超过 CPU 核心数时,CPU 会把大量时间花在调度线程上,而不是执行有效任务,导致系统效率下降。
b. 创建销毁开销大
- 线程的创建和销毁都是重量级操作,需要底层内核的介入。对于大量、短生命周期的任务(例如图片解码、网络请求),频繁地创建和销毁线程的代价远高于任务执行本身的代价。

最低0.47元/天 解锁文章
1019

被折叠的 条评论
为什么被折叠?



