Java理论与实践: 并发在一定程度上使一切变得简单 - 编程入门网
Runnable() {}).start() 这个 常用的方法。但 ThreadedExecutor 有一个重要的好处:通过只改变 executor 结构,就可以转移到其它执行模型,而不必缓慢地在整个应用程序源码内查找所 有创建新线程的地方。 QueuedExecutor 使用一个后端线程来处理所有任务,这 非常类似于 AWT 和 Swing 中的事件线程。 QueuedExecutor 具有一个很好的特 性:任务按照排队的顺序来执行,因为是在一个线程内来执行所有的任务,任务 无需同步对共享数据的所有访问。
PooledExecutor 是一个复杂的线程池实现,它不但提供工作线程(worker thread)池中任务的调度,而且还可灵活地调整池的大小,同时还提供了线程生 命周期管理,这个实现可以限制工作队列中任务的数目,以防止队列中的任务耗 尽所有可用内存,另外还提供了多种可用的关闭和饱和度策略(阻塞、废弃、抛 出、废弃最老的、在调用者中运行等)。所有的 Executor 实现为您管理线程的 创建和销毁,包括当关闭 executor 时,关闭所有线程,另外还为线程创建过程 提供了 hook,以便应用程序可以管理它希望管理的线程实例化。例如,这使您 可以将所有工作线程放在特定的 ThreadGroup 中,或者赋予它们描述性名称。 FutureResult 有时您希望异步地启动一个进程,同时希望在以后需要这个进程时,可以使 用该进程的结果。 FutureResult 实用程序类使这变得很容易。 FutureResult 表示可能要花一段时间执行的任务,并且可以在另一个线程中执行此任务, FutureResult 对象可用作执行进程的句柄。通过它,您可以查明该任务是否已 经完成,可以等待任务完成,并检索其结果。可以将 FutureResult 与 Executor 组合起来;可以创建一个 FutureResult 并将其排入 executor 的队 列,同时保留对 FutureResult 的引用。清单 1 显示了一个一同使用 FutureResult 和 Executor 的简单示例,它异步地启动图像着色,并继续进行 其它处理: 清单 1. 运作中的 FutureResult 和 Executor
Java理论与实践: 并发在一定程度上使一切变得简单(3)时间:2010-12-21 IBM Brian GoetzFutureResult 和高速缓存 还可以使用 FutureResult 来提高按需装入高速缓存的并发性。通过将 FutureResult 放置在高速缓存内,而不是放置计算本身的结果,可以减少持有 高速缓存上写锁的时间。虽然这种做法不能加快第一个线程把某一项放入高速缓 存,但它 将减少第一个线程阻塞其它线程访问高速缓存的时间。它还使其它线 程更早地使用结果,因为它们可以从高速缓存中检索 FutureTask 。清单 2 显 示了使用用于高速缓存的 FutureResult 示例: 清单 2. 使用 FutureResult 来改善高速缓存
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |