文档

Java™教程
隐藏目录
线程池
路径: Java基础类
课程: 并发
章节: 高级并发对象
子章节: Executors

线程池

java.util.concurrent中的大多数执行器实现都使用线程池,它由工作线程组成。这种线程与它执行的RunnableCallable任务分开存在,通常用于执行多个任务。

使用工作线程可以最小化由于线程创建而产生的开销。线程对象占用大量内存,在大型应用程序中,分配和释放许多线程对象会产生显著的内存管理开销。

一种常见的线程池类型是固定线程池。这种类型的池始终有指定数量的线程运行;如果线程在仍在使用时被终止,它会自动替换为一个新线程。任务通过内部队列提交到池中,当活动任务多于线程时,该队列会保存额外的任务。

固定线程池的一个重要优点是应用程序可以优雅降级。为了理解这一点,考虑一个Web服务器应用程序,每个HTTP请求由一个单独的线程处理。如果应用程序简单地为每个新的HTTP请求创建一个新线程,并且系统接收到的请求多于它可以立即处理的数量,当所有这些线程的开销超过系统容量时,应用程序将突然停止响应所有请求。通过限制可以创建的线程数,应用程序将无法像请求进来那样快速服务HTTP请求,但它将以系统可以维持的速度服务它们。

使用固定线程池的一种简单方法是调用java.util.concurrent.Executors中的newFixedThreadPool工厂方法。该类还提供以下工厂方法:

如果上述工厂方法提供的执行器都不满足您的需求,构建java.util.concurrent.ThreadPoolExecutorjava.util.concurrent.ScheduledThreadPoolExecutor的实例将给您提供额外的选项。


上一页: 执行器接口
下一页: Fork/Join