java8的JDK文档--Tutorial - Concurrency Lesson-Thread Pools
本次主要介绍的文档对线程池的内容,译文如下:
线程池
java.util.concurrent 中的大多数执行器实现都使用线程池,这些线程池由工作线程组成。这种线程与它执行的 Runnable 和 Callable 任务分开存在,通常用于执行多个任务。
使用工作线程可最大程度地减少线程创建产生的开销。线程对象使用大量内存,在大型应用程序中,分配和解分配许多线程对象会产生大量的内存管理开销。
一种常见的线程池类型是固定线程池( fixed thread pool)。这种类型的池始终运行指定数量的线程;如果线程在仍在使用时以某种方式终止,则会自动将其替换为新线程。任务通过内部队列提交到池中,只要活动任务多于线程,该队列就会保留额外的任务。
固定线程池的一个重要优点是使用它的应用程序会正常降级。要理解这一点,请考虑一个 Web 服务器应用程序,其中每个 HTTP 请求都由单独的线程处理。如果应用程序只是为每个新的 HTTP 请求创建一个新线程,并且系统收到的请求数超过了它立即处理的请求数,则当所有这些线程的开销超过系统的容量时,应用程序将突然停止响应所有请求。由于对可以创建的线程数有限制,应用程序不会像 HTTP 请求进入时那样快地为它们提供服务,但它会以系统可以承受的速度为它们提供服务。
创建使用固定线程池的执行程序的一种简单方法是在 java.util.concurrent.Executors 中调用 newFixedThreadPool 工厂方法。 此类还提供以下工厂方法:
- newCachedThreadPool 方法创建具有可扩展线程池的执行程序。此执行器适用于启动许多短期任务的应用程序。
- newSingleThreadExecutor 方法创建一个一次执行单个任务的执行器。
- 几个工厂方法是上述执行程序的 ScheduledExecutorService 版本。
如果上述工厂方法提供的执行程序都不能满足您的需求,则构造 java.util.concurrent.ThreadPoolExecutor 或 java.util.concurrent.ScheduledThreadPoolExecutor 的实例将为您提供其他选项。
我的翻译水平有限,提供下面的原文给给位参考:
-----一位在编码路上的40程序员