用Java开发一个简单、并发的应用时,一般创建一些 Runnable 对象及对应的 Thread 对象来执行它们。 如果有很多并发任务,此实现方式有以下不足:
从 Java 5 开始,Java concurrency API 提供了帮助解决问题的机制。 此机制为 Executor 框架,包含 Executor 接口、其子接口 ExecutorService 和实现这 2 个接口的 ThreadPoolExecutor 类。
此机制将任务的创建和执行分离。有了一个执行者,您只需要实现 Runnable 对象并交给执行者。 执行者负责它们的执行、实例化并运行于必要的线程。执行者还使用线程池来提高性能。 当您将一个任务交给执行者,执行者尝试使用一个线程池来执行此任务,避免线程的持续生成。
Executor 框架的另一个重要的优势是 Callable 接口。它类似 Runnable 接口,而且提供2个改进,如下: