文档

Java™ 教程-Java Tutorials 中文版
线程池
Trail: Essential Classes
Lesson: Concurrency
Section: High Level Concurrency Objects
Subsection: Executors

线程池

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

使用工作线程可以最大限度地减少创建线程的开销。线程对象使用大量内存,而在大型应用程序中,分配和释放许多线程对象会产生大量的内存管理开销。

一种常见类型的线程池是 fixed thread pool (固定线程池)。这种类型的线程池始终具有指定数量的线程在运行;如果某个线程在其仍在使用时以某种方式终止,它将自动替换为新线程。任务通过内部队列提交到线程池中,只要有活动任务多于线程,该队列就会保存额外的任务。

固定线程池的一个重要优点是使用它的应用程序 degrade gracefully (优雅降级)。要理解这一点,请考虑一个 Web 服务器应用程序,其中每个 HTTP 请求都由一个单独的线程处理。如果应用程序只是为每个新的 HTTP 请求创建一个新线程,并且系统接收的请求数超过它可以立即处理的数量,那么当所有这些线程的开销超过系统的容量时,应用程序将突然停止响应 all (所有) 请求。由于可以创建的线程数量有限制,应用程序不会在 HTTP 请求进入时立即处理,但它将在系统可以处理时尽快处理。

创建一个使用固定线程池的执行器的方法是调用 java.util.concurrent.ExecutorsnewFixedThreadPool 工厂方法。该类还提供以下一些工厂方法:

如果上述工厂方法提供的执行器都不满足你的需要,则构造 java.util.concurrent.ThreadPoolExecutorjava.util.concurrent.ScheduledThreadPoolExecutor 将为你提供其他选项。


Previous page: Executor Interfaces
Next page: Fork/Join