脚本宝典收集整理的这篇文章主要介绍了

探秘高并发之java.util.concurrent (二)

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。

本系列关于concurrent的代码示例,是被我分割成了小部分,在系列文章结束以后,我会将较为完整的代码上传,在写的过程中我会参考官方API以及其他牛人的见解,大家有不同的看法可以在下面回复。

这一篇我们继续讲concurrent包下面的接口,本篇讲CallableAsynchronousCompletionTaskCompletionServiceCompletionService;其实这四个接口内容不算多就是概念型的,当然他们并不是用不到的。

1. Callable

实现Callable接口的类其实就是一个可以返回结果的任务,并且可以抛出异常。 通过ExecutorService.submit 方法提交一个callable任务,并且通过Future对象来获得结果。 Future对象可以取消运行任务,设置等待时间,获取任务状态,最终获得任务结果。Callable类似于 Runnable,但是runnable并不会有返回结果和异常信息。这一点我们需要区别开。

2. AsynchronousCompletionTask

一个标记接口识别异步任务的异步方法。他可以提供监控,调试和跟踪异步活动。

3. CompletionService

ExecutorService的扩展,可以获得线程执行结果。
代码示例:

import java.util.concurrent.Callable; import java.util.concurrent.CompletionService; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class TestCompletionService {     public static void main(String[] args) throws InterruptedException,             ExecutionException {         ExecutorService exec = Executors.newFixedThreadPool(10);         CompletionService serv = new ExecutorCompletionService(exec);         for (int index = 0; index < 5; index++) {             final int NO = index;             Callable downImg = new Callable() {                 public String call() throws Exception {                     Thread.sleep((long) (Math.random() * 10000));                     return "Downloaded Image " + NO;                 }             };             serv.submit(downImg);         }         Thread.sleep(1000 * 2);         System.out.println("Show web content");         for (int index = 0; index < 5; index++) {             Future task = serv.take();             String img = (String)task.get();             System.out.println(img);         }         System.out.println("End");         // 关闭线程池         exec.shutdown();      }  } 

4. CompletionStage

异步计算中可能出现的一个阶段,也就是说当一个CompletionStage 完成时执行的动作或计算。
其实拆开来看就是,一个阶段的执行可能会触发完成一个单一的阶段,或两个阶段,或多个阶段。在一个阶段的依赖关系被安排使用的方法与前缀。由两个阶段完成所触发的,可以结合他们的结果或效果,使用相应命名的方法。由两个阶段所触发的,没有保证的结果用于依赖阶段的计算。这个类呢可以说让人很难取舍到底什么时候用,什么时候需要做几个阶段的处理计算。这个其实根据大家的业务考虑使用与否,毕竟他只是一个工具,即使有相同业务也可以使用别的方式实现。

总结

以上是脚本宝典为你收集整理的

探秘高并发之java.util.concurrent (二)

全部内容,希望文章能够帮你解决

探秘高并发之java.util.concurrent (二)

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过