3.4 小结
在简单的并发应用程序中,本章使用Runnable接口和Thread类执行并发任务。我们创建和管理这些线程并且控制其执行。但是在大型并发应用程序中,不能采用这种方式,因为它会导致很多问题。在这种情况下,Java并发API引入了执行器框架。本章讲述了该框架的基本特征及其构成组件。首先,我们探讨了Executor接口,它定义了将Runnable任务发送给执行器的基本方法。该接口有一个子接口ExecutorService,该子接口所包含的方法可向执行器发送返回结果的任务(这些任务实现了Callable接口,正如第5章即将讲到的那样)和一个任务列表。
ThreadPoolExecutor类是这两种接口的基本实现:增加额外的方法以获取有关执行器状态的信息,以及正在执行的线程或任务的数量。为该类创建对象最简单的方式是使用Executors工具类,该类包含了创建不同类型执行器的方法。
我们已经向你展示了如何使用执行器,并且使用执行器实现了两个实际例子,说明了如何将串行算法转换为并发算法。第一个例子是k-最近邻算法,应用于UCI机器学习资源库的Bank Marketing数据集。第二个例子是客户端/服务器应用程序,用以查询某银行发布的发展指数。
在这两个用例中,使用执行器极大地改善了性能。
下一章将介绍如何采用执行器实现高级技术。我们将通过提高任务撤销的可能性,完善客户端/服务器应用程序,并且使高优先级任务早于低优先级任务执行。我们还将展示如何实现周期性执行的任务,实现一个RSS新闻阅读器。
