Executor的用法(线程、异步)
来源:互联网 发布:sql全称 编辑:程序博客网 时间:2024/06/06 08:39
ExecutorService是Executor的子类
public interface ExecutorService
- extends Executor
Executor
提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future
的方法。
可以关闭 ExecutorService,这将导致其停止接受新任务。关闭后,执行程序将最后终止,这时没有任务在执行,也没有任务在等待执行,并且无法提交新任务。
通过创建并返回一个可用于取消执行和/或等待完成的 Future
,方法 submit 扩展了基本方法 Executor.execute(java.lang.Runnable)
。方法 invokeAny 和 invokeAll 是批量执行的最常用形式,它们执行任务集合,然后等待至少一个,或全部任务完成(可使用 ExecutorCompletionService
类来编写这些方法的自定义变体)。
Executors
类提供了用于此包中所提供的执行程序服务的工厂方法。
用法示例
下面给出了一个网络服务的简单结构,这里线程池中的线程作为传入的请求。它使用了预先配置的 Executors.newFixedThreadPool(int)
工厂方法:
class NetworkService { 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 serve() { 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 } }方法摘要 boolean
awaitTermination(long timeout, TimeUnit unit)
请求关闭、发生超时或者当前线程中断,无论哪一个首先发生之后,都将导致阻塞,直到所有任务完成执行。
<T> List<Future<T>>
invokeAll(Collection<Callable<T>> tasks)
执行给定的任务,当所有任务完成时,返回保持任务状态和结果的 Future 列表。
<T> List<Future<T>>
invokeAll(Collection<Callable<T>> tasks, long timeout, TimeUnit unit)
执行给定的任务,当所有任务完成或超时期满时(无论哪个首先发生),返回保持任务状态和结果的 Future 列表。
<T> T
invokeAny(Collection<Callable<T>> tasks)
执行给定的任务,如果某个任务已成功完成(也就是未抛出异常),则返回其结果。
<T> T
invokeAny(Collection<Callable<T>> tasks, long timeout, TimeUnit unit)
执行给定的任务,如果在给定的超时期满前某个任务已成功完成(也就是未抛出异常),则返回其结果。boolean
isShutdown()
如果此执行程序已关闭,则返回 true。boolean
isTerminated()
如果关闭后所有任务都已完成,则返回 true。void
shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。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,该 Future 表示任务一旦完成后即返回给定的结果。
shutdown
void shutdown()
- 启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。
- 抛出:
SecurityException
- 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用方修改的线程(因为它没有保持RuntimePermission
("modifyThread")),或者安全管理器的 checkAccess 方法拒绝访问。
shutdownNow
List<Runnable> shutdownNow()
- 试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表。
无法保证能够停止正在处理的活动执行任务,但是会尽力尝试。例如,通过
Thread.interrupt()
来取消典型的实现,所以如果任何任务屏蔽或无法响应中断,则可能永远无法终止该任务。 - 返回:
- 从未开始执行的任务的列表。
- 抛出:
SecurityException
- 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用方修改的线程(因为它没有保持RuntimePermission
("modifyThread")),或者安全管理器的 checkAccess 方法拒绝访问。
isShutdown
boolean isShutdown()
- 如果此执行程序已关闭,则返回 true。
- 返回:
- 如果此执行程序已关闭,则返回 true
isTerminated
boolean isTerminated()
- 如果关闭后所有任务都已完成,则返回 true。注意,除非首先调用 shutdown 或 shutdownNow,否则 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。
如果想立即阻塞任务的等待,则可以使用 result = exec.submit(aCallable).get(); 形式的构造。
注:
Executors
类包括了一组方法,可以转换某些其他常见的类似于闭包的对象,例如,将PrivilegedAction
转换为Callable
形式,这样就可以提交它们了。 - 参数:
task
- 要提交的任务- 返回:
- 表示任务等待完成的 Future
- 抛出:
RejectedExecutionException
- 如果任务无法安排执行NullPointerException
- 如果 task 为 null
submit
<T> Future<T> submit(Runnable task, T result)
- 提交一个 Runnable 任务用于执行,并返回一个 Future,该 Future 表示任务一旦完成后即返回给定的结果。
- 参数:
task
- 要提交的任务result
- 返回的结果- 返回:
- 表示任务等待完成的 Future,并且其 get() 方法在完成后将返回给定的结果。
- 抛出:
RejectedExecutionException
- 如果任务无法安排执行NullPointerException
- 如果 task 为 null
submit
Future<?> submit(Runnable task)
- 提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。
- 参数:
task
- 要提交的任务。- 返回:
- 表示任务等待完成的 Future,并且其 get() 方法在完成后将返回 null。
- 抛出:
RejectedExecutionException
- 如果任务无法安排执行NullPointerException
- 如果 task 为 null
invokeAll
<T> List<Future<T>> invokeAll(Collection<Callable<T>> tasks) throws InterruptedException
- 执行给定的任务,当所有任务完成时,返回保持任务状态和结果的 Future 列表。返回列表的所有元素的
Future.isDone()
为 true。注意,可以正常地或通过抛出异常来终止已完成 任务。如果正在进行此操作时修改了给定的集合,则此方法的结果是不明确的。 - 参数:
tasks
- 任务集合- 返回:
- 表示任务的 Future 列表,列表顺序与给定任务列表的迭代器所生成的顺序相同,每个任务都已完成。
- 抛出:
InterruptedException
- 如果等待时发生中断,在这种情况下取消尚未完成的任务。NullPointerException
- 如果任务或其任意元素为 nullRejectedExecutionException
- 如果所有任务都无法安排执行
invokeAll
<T> List<Future<T>> invokeAll(Collection<Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException
- 执行给定的任务,当所有任务完成或超时期满时(无论哪个首先发生),返回保持任务状态和结果的 Future 列表。返回列表的所有元素的
Future.isDone()
为 true。一旦返回后,即取消尚未完成的任务。注意,可以正常地或通过抛出异常来终止已完成 任务。如果此操作正在进行时修改了给定的集合,则此方法的结果是不明确的。 - 参数:
tasks
- 任务集合timeout
- 最长等待时间unit
- timeout 参数的时间单位- 返回:
- 表示任务的 Future 列表,列表顺序与给定任务列表的迭代器所生成的顺序相同。如果操作未超时,则已完成所有任务。如果确实超时了,则某些任务尚未完成。
- 抛出:
InterruptedException
- 如果等待时发生中断,在这种情况下取消尚未完成的任务NullPointerException
- 如果任务或其任意元素或 unit 为 nullRejectedExecutionException
- 如果所有任务都无法安排执行
invokeAny
<T> T invokeAny(Collection<Callable<T>> tasks) throws InterruptedException, ExecutionException
- 执行给定的任务,如果某个任务已成功完成(也就是未抛出异常),则返回其结果。一旦正常或异常返回后,则取消尚未完成的任务。如果此操作正在进行时修改了给定的集合,则此方法的结果是不明确的。
- 参数:
tasks
- 任务集合- 返回:
- 某个任务返回的结果
- 抛出:
InterruptedException
- 如果等待时发生中断NullPointerException
- 如果任务或其任意元素为 nullIllegalArgumentException
- 如果任务为空ExecutionException
- 如果没有任务成功完成RejectedExecutionException
- 如果任务无法安排执行
invokeAny
<T> T invokeAny(Collection<Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
- 执行给定的任务,如果在给定的超时期满前某个任务已成功完成(也就是未抛出异常),则返回其结果。一旦正常或异常返回后,则取消尚未完成的任务。如果此操作正在进行时修改了给定的集合,则此方法的结果是不明确的。
- 参数:
tasks
- 任务集合timeout
- 最长等待时间unit
- timeout 参数的时间单位- 返回:
- 某个任务返回的结果
- 抛出:
InterruptedException
- 如果等待时发生中断NullPointerException
- 如果任务或其任意元素或 unit 为 nullTimeoutException
- 如果在所有任务成功完成之前给定的超时期满ExecutionException
- 如果没有任务成功完成RejectedExecutionException
- 如果任务无法安排执行
- Executor的用法(线程、异步)
- java5线程框架Executor的用法举例
- java5线程框架Executor的用法举例
- java5线程框架Executor的用法举例
- Executor线程池的几种用法
- Executor--线程的执行器
- Executor框架的线程池
- 安卓(Android)中如何优雅的 创建/执行 异步任务/回调(AsyncTask 、Thread、Job、CallBack、Handler) ?线程池(Executor)
- JAVA线程池Executor的简单使用
- Executor线程,线程池
- Java Executor并发框架(十二)Executor框架线程池BlockingQueue的三种实现区别
- Java Executor并发框架(十三)Executor框架线程池关于异常的处理
- Executor线程池实例
- Java线程之Executor
- 线程池与Executor
- Executor框架管理线程
- Executor线程池
- Executor线程池解析
- oracle:union、union all、intersect、minus
- 记录Gridview的一些显示格式
- 双核浏览器叩待建立业界标准
- 在Style Report中如何制作分栏式报表
- SQL存储过程学习
- Executor的用法(线程、异步)
- POJ2082Terrible Sets题解
- VS2010 实现文件夹浏览、遍历所有文件
- GDI绘饼状图柱状图
- Flex基础-----之元数据标签说明(基本够全了)
- 宏中"#"和"##"的用法
- 随文
- BW:SAP 批量填写过滤器
- 带返回值的存储过程