java.util.concurrent.Executors 类
此包中所定义的 Executor
、ExecutorService
、ScheduledExecutorService
、ThreadFactory
和 Callable
类的工厂和实用方法。此类支持以下各种方法:
- 创建并返回设置有常用配置字符串的
ExecutorService
的方法。 - 创建并返回设置有常用配置字符串的
ScheduledExecutorService
的方法。 - 创建并返回“包装的”ExecutorService 方法,它通过使特定于实现的方法不可访问来禁用重新配置。
- 创建并返回
ThreadFactory
的方法,它可将新创建的线程设置为已知的状态。 - 创建并返回非闭包形式的
Callable
的方法,这样可将其用于需要 Callable 的执行方法中。
从一下关键类可以看出,Executors 这个工具类的作用是非常大的。建立threadpool,建立threadFactory等都最好通过此类。
一个
ExecutorService
,它使用可能的几个池线程之一执行每个提交的任务,通常使用 Executors
工厂方法配置。public interface ThreadFactory
根据需要创建新线程的对象。使用线程工厂就无需再手工编写对 new Thread
的调用了,从而允许应用程序使用特殊的线程子类、属性等等。
此接口最简单的实现就是:
class SimpleThreadFactory implements ThreadFactory { public Thread newThread(Runnable r) { return new Thread(r); } }
Executors.defaultThreadFactory()
方法提供了更有用的简单实现,即在返回线程前将已创建线程的上下文设置为已知的值。
ThreadPoolExecutor
个 ExecutorService
,它使用可能的几个池线程之一执行每个提交的任务,通常使用 Executors
工厂方法配置。
线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。每个ThreadPoolExecutor 还维护着一些基本的统计数据,如完成的任务数。
为了便于跨大量上下文使用,此类提供了很多可调整的参数和扩展钩子 (hook)。但是,强烈建议程序员使用较为方便的 Executors
工厂方法 Executors.newCachedThreadPool()
(无界线程池,可以进行自动线程回收)、Executors.newFixedThreadPool(int)
(固定大小线程池)和Executors.newSingleThreadExecutor()
(单个后台线程),它们均为大多数使用场景预定义了设置。否则,在手动配置和调整此类时,必须遵循一定的原则。