Java线程池相关面试题

Java 线程池相关问题

1.Java 中的线程池是如何实现的?

 在 Java 中,所谓的线程池中的“线程”,其实是被抽象为了一个
静 态 内 部 类 Worker , 它 基 于 AQS 实 现 , 存 放 在 线 程 池
的 HashSet<Worker> workers 成员变量中;
 而 需 要 执 行 的 任 务 则 存 放 在 成 员 变 量 workQueue
(BlockingQueue<Runnable> workQueue)中。
这样,整个线程池实现的基本思想就是:从 workQueue 中不断取出需
要执行的任务,放在 Workers 中进行处理。


2.创建线程池的几个核心构造参数?


Java 中的线程池的创建其实非常灵活,我们可以通过配置不同的参数,
创建出行为不同的线程池,这几个参数包括:
 corePoolSize:线程池的核心线程数。
 maximumPoolSize:线程池允许的最大线程数。
 keepAliveTime:超过核心线程数时闲置线程的存活时间。
 workQueue:任务执行前保存任务的队列,保存由 execute 方法
提交的 Runnable 任务。


3.线程池中的线程是怎么创建的?是一开始就随着线程池的启动创建好的吗?

显然不是的。线程池默认初始化后不启动 Worker,等待有请求时才启
动。
每当我们调用 execute() 方法添加一个任务时,线程池会做如下判断:
 如果正在运行的线程数量小于 corePoolSize,那么马上创建线程
运行这个任务;
 如果正在运行的线程数量

猜你喜欢

转载自blog.csdn.net/zzhuan_1/article/details/104009709