javatm platform
standard ed. 6

java.util.concurrent
接口 executorservice

所有(suǒ yǒu)超级接口:
executor
所有已知子接口:
scheduledexecutorservice
所有已知实现类:
abstractexecutorservice, scheduledthreadpoolexecutor, threadpoolexecutor

public interface executorservice
extends executor

executor 提供了管理(guǎn lǐ)终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 future 的方法。

可以(can)关闭 executorservice,这将导致其拒绝新任务。提供两个方法来关闭 executorserviceshutdown() 方法在终止前允许(yǔn xǔ)执行以前提交的任务,而 shutdownnow() 方法阻止等待任务启动并试图停止当前正在执行的任务。在终止时,执行程序没有任务在执行,也没有任务在等待执行,并且无法(to be)提交新任务。应该(yīng gāi)关闭未使用的 executorservice 以允许(yǔn xǔ)回收其资源。

通过创建并返回一个可用于取消执行和/或等待完成的 future,方法 submit 扩展了基本方法 executor.execute(java.lang.runnable)。方法 invokeanyinvokeall 是批量执行的最常用形式,它们执行任务 collection,然后等待至少一个,或全部(quán bù)任务完成(可使用 executorcompletionservice 类来编写这些方法的自定义变体)。

executors 类提供了用于此包中所提供的执行程序服务(services)的工厂方法。

用法示例

下面给出了一个网络服务(services)的简单结构,这里线程池中的线程作为传入的请求。它使用了预先配置的 executors.newfixedthreadpool(int) 工厂方法:
 class networkservice implements runnable {  private final serversocket serversocket;  private final executorservice pool;  public networkservice(int port, int poolsize)  throws ioexception { serversocket=new serversocket(port); pool=executors.newfixedthreadpool(poolsize);  } public void run() { // run the service try {  for (;;) {   pool.execute(new handler(serversocket.accept()));  } } catch (ioexception ex) {  pool.shutdown(); }  } } class handler implements runnable {  private final socket socket;  handler(socket socket) { this.socket=socket; }  public void run() { // read and service request on socket  } } 
下列方法分两个阶段关闭 executorservice。第一阶段调用 shutdown 拒绝传入任务,然后调用 shutdownnow(如有必要)取消所有遗留的任务:
 void shutdownandawaittermination(executorservice pool) {  pool.shutdown(); // disable new tasks from being submitted  try { // wait a while for existing tasks to terminate if (!pool.awaittermination(60, timeunit.seconds)) {  pool.shutdownnow(); // cancel currently executing tasks  // wait a while for tasks to respond to being cancelled  if (!pool.awaittermination(60, timeunit.seconds))  system.err.println("pool did not terminate"); }  } catch (interruptedexception ie) { // (re-)cancel if current thread also interrupted pool.shutdownnow(); // preserve interrupt status thread.currentthread().interrupt();  } } 

内存一致性效果:线程中向 executorservice 提交 runnablecallable 任务之前的操作 happen-before 由该任务所提取的所有操作,后者依次 happen-before 通过 future.get() 获取的结果。

从以下版本开始(kāi shǐ):
1.5

方法摘要
 booleanawaittermination(long timeout,timeunit unit)
          请求关闭、发生(occasionally occurred)超时或者当前线程中断,无论哪一个首先发生(occasionally occurred)之后,都将导致阻塞,直到所有任务完成执行。
<t> list<future<t>>
invokeall(collection<? extends callable<t>> tasks)
          执行给定的任务,当所有任务完成时,返回保持任务状态和结果的 future 列表。
<t> list<futurejs随机数<t>>
invokeall(collection<? extends callable<t>> tasks,long timeout,timeunit unit)
          执行给定的任务,当所有任务完成或超时期满时(无论哪个首先发生),返回保持任务状态和结果的 future 列表。
<t> t
invokeany(collection<? extends callable<t>> tasks)
          执行给定的任务,如果某个任务已成功(chéng gōng)完成(也就是未抛出异常),则返回其结果。
<t> t
invokeany(collection<? extends callable<t>> tasks,long timeout,timeunit unit)
          执行给定的任务,如果在给定的超时期满前某个任务已成功(chéng gōng)完成(也就是未抛出异常),则返回其结果。
 booleanisshutdown()
          如果此执行程序已关闭,则返回 true
 booleanisterminated()
          如果关闭后所有任务都已完成,则返回 true
 voidshutdown()
          启动一次顺序关闭,执行以前提交的任务,但不接受(jiē shòu)新任务。
 list<runnable>shutdownnow()
          试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表。
<t> future<t>
submit(callable<t> task)
          提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 future。
 future<?>submit(runnable task)
          提交一个 runnable 任务用于执行,并返回一个表示该任务的 future。
<t> future<t>
submit(runnable task,t result)
          提交一个 runnable 任务用于执行,并返回一个表示该任务的 future。
 
从接口 java.util.concurrent.executor 继承的方法
execute
 

方法详细(gǎn)畔

shutdown

void shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受(jiē shòu)新任务。如果已经(yǐ jing)关闭,则调用没有其他(qí tā)作用。

抛出:
securityexception - 如果安全(ān quán)管理(guǎn lǐ)器存在并且关闭,此 executorservice 可能(kě néng)操作某些不允许调用者修改的线程(因为它没有保持 runtimepermission("modifythread")),或者安全(ān quán)管理器的 checkaccess 方法拒绝访问(fǎng wèn)。

shutdownnow

list<runnable> shutdownnow()
试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表。

无法(to be)保证能够停止正在处理的活动执行任务,但是(But)会尽力尝试。例如,通过 thread.interrupt()

经高雄市政府详查,市区道路合计81条地下石化管线、分属13家业者,中油以45条居冠,其中除台塑、李长荣、国乔,其余均未在高雄设置总公司
林右昌也说,相信(xiāng xìn)在大家的团结努力下,定能把环境保护与反毒工作(work)做得更好;此外,春耕时节下雨,代表今年风调雨顺,一同种下树苗的同时,也意味着以具体行动展现反毒、爱(love)护地球与保护环境的决心
华航招募空服员标?饰?笱б陨媳弦怠?TOEIC 600分或同等英语能力者;招募流程(liú chéng)为初试及?}试
未来为了避免志愿役人员集中在相对轻的后勤单位,将给最辛苦的陆军步兵、?h兵、装甲、海军舰艇、陆战队等单位每月加发5000元战斗部队加给
来取消典型的实现,所以任何任务无法响应中断都可能(kě néng)永远无法终止。

返回:
从未开始(kāi shǐ)执行的任务的列表
抛出:
securityexception - 如果安全管理器存在并且关闭,此 executorservice 可能操作某些不允许调用者修改的线程(因为它没有保持 runtimepermission("modifythread")),或者安全管理器的 checkaccess 方法拒绝访问(fǎng wèn)。

isshutdown

boolean isshutdown()
如果此执行程序已关闭,则返回 true

返回:
如果此执行程序已关闭,则返回 true

isterminated

boolean isterminated()
如果关闭后所有任务都已完成,则返回 true。注意(危险信号),除非首先调用 shutdownshutdownnow,否则 isterminated 永不为 true

返回:
如果关闭后所有任务都已完成,则返回 true

awaittermination

boolean awaittermination(long timeout,     timeunit unit)     throws interruptedexception
请求关闭、发生超时或者当前线程中断,无论哪一个首先发生之后,都将导致阻塞,直到所有任务完成执行。

参数:
timeout - 最长等待时间
unit - timeout 参数的时间单位
返回:
如果此执行程序终止,则返回 true;如果终止前超时期满,则返回 false
抛出:
interruptedexception - 如果等待时发生中断

submit

<t> future<t> submit(callable<t> task)
提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 future。该 future 的 get 方法在成功完成时将会返回该任务的结果。

如果想立即阻塞任务的等待,则可以(can)使用 result=exec.submit(acallable).get(); 形式的构造。

注:executors 类包括(included)了一组方法,可以转换某些其他(qí tā)常见(cháng jiàn)的类似于闭包的对象,例如,将 privilegedaction 转换为 callable 形式,这样(then)就可以提交它们了。

参数:
task - 要提交的任务
返回:
表示任务等待完成的 future
抛出:
rejectedexecutionexception - 如果任务无法安排执行
nullpointerexception - 如果该任务为 null

submit

<t> future<t> submit(runnable task,     t result)
提交一个 runnable 任务用于执行,并返回一个表示该任务的 future。该 future 的 get 方法在成功完成时将会返回给定的结果。

参数:
task - 要提交的任务
result - 返回的结果
返回:
表示任务等待完成的 future
抛出:
rejectedexecutionexception - 如果任务无法安排执行
nullpointerexception - 如果该任务为 null

submit

future<?> submit(runnable task)
提交一个 runnable 任务用于执行,并返回一个表示该任务的 future。该 future 的 get 方法在成功 完成时将会返回 null

参数:
task - 要提交的任务
返回:
表示任务等待完成的 future
抛出:
rejectedexecutionexception - 如果任务无法安排执行
nullpointerexception - 如果该任务为 null

invokeall

<t> list<future<t>> invokeall(collection<? extends callable<t>> tasks)     throws interruptedexception
执行给定的任务,当所有任务完成时,返回保持任务状态和结果的 future 列表。返回列表的所有元素的 future.isdone()true。注意(危险信号),可以正常地或通过抛出异常来终止已完成 任务。如果正在进行此操作时修改了给定的 collection,则此方法的结果是不确定的。

参数:
tasks - 任务 collection
返回:
表示任务的 future 列表,列表顺序与给定任务列表的迭代器所生成的顺序相同,每个任务都已完成。
抛出:
interruptedexception - 如果等待时发生中断,在这种情况下取消尚未完成的任务。
nullpointerexception - 如果任务或其任意元素为 null
rejectedexecutionexception - 如果所有任务都无法安排执行

js随机数

invokeall

<t> list<future<t>> invokeall(collection<? extends callable<t>> tasks,     long timeout,     timeunit unit)     throws interruptedexception
执行给定的任务,当所有任务完成或超时期满时(无论哪个首先发生),返回保持任务状态和结果的 future 列表。返回列表的所有元素的 future.isdone()true。一旦返回后,即取消尚未完成的任务。注意,可以正常地或通过抛出异常来终止已完成 任务。如果此操作正在进行时修改了给定的 collection,则此方法的结果是不确定的。

参数:
tasks - 任务 collection
timeout - 最长等待时间
unit - timeout 参数的时间单位
返回:
表示任务的 future 列表,列表顺序与给定任务列表的迭代器所生成的顺序相同。如果操作未超时,则已完成所有任务。如果确实超时了,则某些任务尚未完成。
抛出:
interruptedexception - 如果等待时发生中断,在这种情况下取消尚未完成的任务
nullpointerexception - 如果任务或其任意元素或 unit 为 null
rejectedexecutionexception - 如果所有任务都无法安排执行

invokeany网站地图 手机端

<t> t invokeany(collection<? extends callable<t>> tasks)  throws interruptedexception,    executionexception
执行给定的任务,如果某个任务已成功完成(也就是未抛出异常),则返回其结果。一旦正常或异常返回后,则取消尚未完成的任务。如果此操作正在进行时修改了给定的 collection,则此方法的结果是不确定的。

参数:
tasks - 任务 collection
返回:
某个任务返回的结果
抛出:
interruptedexception - 如果等待时发生中断
nullpointerexception - 如果任务或其任意元素为 null
illegalargumentexception - 如果任务为空
executionexception - 如果没有任务成功完成
rejectedexecutionexception - 如果任务无法安排执行

invokeany

<t> t invokeany(collection<? extends callable<t>> tasks,    long timeout,    timeunit unit)  throws interruptedexception,    executionexception,    timeoutexception
执行给定的任务,如果在给定的超时期满前某个任务已成功完成(也就是未抛出异常),则返回其结果。一旦正常或异常返回后,则取消尚未完成的任务。如果此操作正在进行时修改了给定的 collection,则此方法的结果是不确定的。

参数:
tasks - 任务 collection
timeout - 最长等待时间
unit - timeout 参数的时间单位
返回:
某个任务返回的结果
抛出:
interruptedexception - 如果等待时发生中断
nullpointerexception - 如果任务或其任意元素或 unit 为 null
timeoutexception - 如果在所有任务成功完成之前给定的超时期满
executionexception - 如果没有任务成功完成
rejectedexecutionexception - 如果任务无法安排执行

javatm platform
standard ed. 6

提交错误或意见(yì jian)
有关更多的 api 参考资料和开发(kāi fā)人员文档,请参阅 java se 开发(kāi fā)人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作(work)代码示例。

版权所有 2007 sun microsystems, inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策