标签:
首先介绍两个重要的接口,Executor和ExecutorService,定义如下:
为了配合使用上面的并发编程接口,有一个Executors工厂类,负责创建各类满足ExecutorService接口的线程池,具体如下:
newFixedThreadPool:创建一个固定长度的线程池,线程池中线程的数量从1增加到最大值后保持不变。如果某个线程坏死掉,将会补充一个新的线程。
newCachedThreadPool:创建长度不固定的线程池,线程池的规模不受限制,不常用。
newSingleThreadExecutor:创建一个单线程的Executor,他其中有一个线程来处理任务,如果这个线程坏死掉,将补充一个新线程。
newScheduledThreadPool:创建固定长度的线程池,以延时或定时的方式来执行任务。
下面是Executor和ExecutorService中常用方法的示例:
上面的ExecutorSerivce接口中的invokeAll(tasks)方法用于批量执行任务,并且将结果按照task列表中的顺序返回。此外,还存在一个批量执行任务的接口CompletionTask。ExecutorCompletionService是实现CompletionService接口的一个类,该类的实现原理很简单:
用Executor类来执行任务,同时把在执行任务的Future放到BlockingQueue<Future<V>>队列中。该类实现的关键就是重写FutureTask类的done()方法,FutureTask类的done()方法是一个钩子函数(关于钩子函数,请读者自行查询),done()方法在FutureTask任务被执行的时候被调用。
ExecutorCompletionService类的核心代码如下:
其中的done()方法定义如下:
ExecutorCompletionService的使用示例如下:
java并发编程框架 Executor ExecutorService invokeall
标签:
原文地址:http://www.cnblogs.com/Evil-Rebe/p/5948427.html