第六章.执行任务

本章强调以任务为核心,以任务的维度来理解多线程。任务分钟,runnable,callable.executre代表了任务的执行,future代表了任务生命周期的管理。

6.1在线程中执行任务

6.1.1顺序执行任务

6.1.2显式地位任务生成一个新的线程

6.1.3无限制线程创建的缺点

6.2Executor框架

6.2.1例子:使用Executor的WebServer

6.2.2执行策略。what,where,when,how

6.2.3线程池

6.2.4Executor的生命周期

6.2.5延期和周期任务

6.3寻找可利用的并行性

6.3.1线性页面渲染器

6.3.2产生结果的任务:Callable和Future

Runnable和Callable都描述了抽象的计算任务。

而Future代表了任务的生命周期,它提供了一下方法:测试任务是否完成或是否取消;获取任务结果;取消任务。

6.3.3通过Futrue的页面渲染器

6.3.4并行异种任务的限制

6.3.5CompletionService:当Executor遇到BlockingQueue

6.3.6例子:用CompletiionService渲染页面

6.3.7向任务中放置时间限制

6.3.8例子:一个旅行(房间)预订的门户(系统)(通过ExcutorService 的invoke al方法,时限l)

总结:

围绕任务的执行组织应用能够简化开发和促进并行。Executor框架能够允许开发者将任务的提交和执行策略解耦,同时能够支持大量的执行策略;一旦你发现自己在生成线程来执行任务,都要考虑使用Executor来替代。将应用分解成多任务,为了最大化这种方法的收益,你必须确认合理任务的边界。在一些应用中,可以很明显地发现任务边界,其他情况下,你就需要做一些分析来揭示更细粒度的可开发的并行性.

本章中用到17个例子,从Listing6.1到Listing6.17

Listing6.1 顺序执行请求的web服务器,由于不好的吞吐量和响应灵敏度,从反方面证明了并行执行的必要性

Listing6.2采用一个请求一个线程方式的web服务器,对于6.1是一个大的提升。但由于服务器产生线程的有限性,这是一个大的缺陷。

这两个例子都在6.1节。都是为了引入Java5的Executor框架

Listing6.3知识Exeutor接口的介绍

Listing6.4就是一个使用线程池的web服务器的例子。使用了Executors.newFixedThreadPool(NTHREADS);

Listing6.5就是一个线程对应一个任务的executor的例子。(通过Executor模拟Listing6.2场景)

Listring6.6就是顺序执行的例子。(通过Executor模拟Listing6.1场景)。

3、4,、5,6都在6.2.1,是对Executor最简单的介绍。

6.2.2节没有例子,但解释了执行策略的意思。what,where,when,how即Listing6.1模式(顺序执行),Listing6.2模式(一比一任务线程),Listing6.3模式(线程池)。

6.2.3节也没有例子

Executor将任务提交和执行策略解耦。主要也就是方便以后轻易修改执行策略。

Listing6.7通过介绍ExecutorService的方法解释了executor的生命周期

Listiing6.8通过一个支持Shutdown的web服务器例子,来说明Shutdown方法的使用.exec.shutDown().(判断exec是否shutDown, exec.isShutDown).

6.2包含Listng6.3,Listing6.4,Listing6.5,Listing6.6.Listing6.7,Listing 6.8

Listing6.9介绍了Time令人困惑的行为模式,从反向说明了timer的不可靠。

Listing6.10演示了顺序执行页面渲染的例子,说明挖掘并行性的必要性

进入6.3.2节

Listing6.11介绍了Future和Callabe接口

Listing6.12通过介绍ThreadPool对newTaskFor的默认实现来说明了ExecutorService可以将一个FutureTask和一个Callable连接起来。

Listing6.13通过使用Future来渲染页面。两个任务,一个任务渲染内容,一个任务下载图片。由于是两种不同种类的任务,这种划分取得的收益有限。

使用Future来等待图片下载完毕;

Listing6.14介绍了ExecutorCompletionService使用的QueueingFuture.QueuingFuture是FutureTask的子类。

Listing6.15使用CompletionService来渲染页面元素(当这些图片被下载完毕后)。

由于将每个图片的下载划分成不同的任务,提高了并行性。呼应本节主题“挖掘并行性”,方式:挖掘相同种类的任务。

以后进入6.3.7时限

Listing6.16通过一段时间内获取广告,演示时限版本的Future(单任务结果获取的时限)

Listing6.17通过executorservice的invokeAll方法来演示一批任务的时限。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值