声明:本文是《 Java 7 Concurrency Cookbook 》的第四章,作者: Javier Fernández González 译者:许巧辉 校对:方腾飞
在这个章节中,我们将覆盖:
- 创建一个线程执行者
- 创建一个大小固定的线程执行者
- 执行者运行带有返回结果的任务
- 运行多个任务并处理第一个结果
- 运行多个任务并处理所有结果
- 执行者延迟运行一个任务
- 执行者周期性地运行一个任务
- 执行者取消一个任务
- 执行者控制一个任务完成
- 执行者分离任务的启动和结果的处理
- 执行者控制被拒绝的任务
引言
通常,当你在Java中开发一个简单的并发编程应用程序,你会创建一些Runnable对象并创建相应的Thread对象来运行它们。如果你开发一个运行多个并发任务的程序,这种途径的缺点如下:
- 你必须要实现很多相关代码来管理Thread对象(创建,结束,获得的结果)。
- 你必须给每个任务创建一个Thread对象。如果你执行一个大数据量的任务,那么这可能影响应用程序的吞吐量。
- 你必须有效地控制和管理计算机资源。如果你创建太多线程,会使系统饱和。
为了解决以上问题,从Java5开始JDK并发API提供一种机制。这个机制被称为Executor framework,接口核心是Executor,Executor的子接口是ExecutorService,而ThreadPoolExecutor类则实现了这两个接口。
这个机制将任务的创建与执行分离。使用执行者,你只要实现Runnable对象并将它们提交给执行者。执行者负责执行,实例化和运行这些线程。除了这些,它还可以使用线程池提高了性能。当你提交一个任务给这个执行者,它试图使用线程池中的线程来执行任务,从而避免继续创建线程。
Callable接口是Executor framework的另一个重要优点。它跟Runnable接口很相似,但它提供了两种改进,如下:
- 这个接口中主要的方法叫call(),可以返回结果。
- 当你提交Callable对象到执行者,你可以获取一个实现Future接口的对象,你可以用这个对象来控制Callable对象的状态和结果。
在这章中提供了11个指南,展示了如何通过使用前面提及的类和Java并发API来处理Executor framework。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/140950.html