Java固定线程池等待线程上下文切换

标签 java multithreading threadpoolexecutor

我的应用程序中有 3 个固定线程池,每个大小为 20。

我在池中提交任务,但有时很少会说每个池 1 、池 2 、池 3 中有 5 个任务,所以每个池中有 15 个线程闲置。我想知道这些空闲线程(总共 45 个)是否会进入上下文切换并降低性能,即使没有任务提交给它们?

最佳答案

如果池线程没有任务,则它们处于状态 WAITING ,这意味着除了等待信号发生(在本例中,等待任务提交)之外,他们没有什么可做的。它们不会被安排任何 CPU 时间,因为它们无事可做。调度程序足够聪明,知道这一点,因此此时它不会与其他更活跃的线程竞争资源。

如果线程处于RUNNABLE状态,那么它可能有实际要做的事情,并获得CPU时间。

因此,池中多余的线程不会与 Activity 线程竞争,但它们确实会占用少量 native 资源(在谈论 60 个线程时,这还不够真正重要)。

关于Java固定线程池等待线程上下文切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456817/

相关文章:

java - 将日志记录限制为仅一个 jar log4j

java - BLE 入门 -> NullPointerException

php - MYSQL统计

c++ - 如何避免线程+优化器==无限循环?

java - 如何在 Java 中停止正在运行的线程

android - 无法访问主线程上的数据库 - Android Room - 使用 ThreadPoolExecutor

java - 获取PDFBox中的文本颜色

java - 通过 java 套接字发送多个文件

c - Linux内核与多线程用户应用同步问题

基于 Java 的线程池 : How to test performance?