我的应用程序中有 3 个固定线程池,每个大小为 20。
我在池中提交任务,但有时很少会说每个池 1 、池 2 、池 3 中有 5 个任务,所以每个池中有 15 个线程闲置。我想知道这些空闲线程(总共 45 个)是否会进入上下文切换并降低性能,即使没有任务提交给它们?
最佳答案
如果池线程没有任务,则它们处于状态 WAITING ,这意味着除了等待信号发生(在本例中,等待任务提交)之外,他们没有什么可做的。它们不会被安排任何 CPU 时间,因为它们无事可做。调度程序足够聪明,知道这一点,因此此时它不会与其他更活跃的线程竞争资源。
如果线程处于RUNNABLE
状态,那么它可能有实际要做的事情,并获得CPU时间。
因此,池中多余的线程不会与 Activity 线程竞争,但它们确实会占用少量 native 资源(在谈论 60 个线程时,这还不够真正重要)。
关于Java固定线程池等待线程上下文切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456817/