当前位置: 网学 > 编程文档 > JAVA > 正文

java concurrent 探秘

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/08/05
sp;    try {      while (true) {       Thread.sleep((int) (Math.random() * 1000));       if(MyBlockingQueue.queue.isEmpty())        break;       String str = MyBlockingQueue.queue.take();       System.out.println(str + " has take!");      }     } catch (Exception e) {      e.printStackTrace();     }    }   };   service.submit(thread);   service.shutdown();}}---------------------执行结果-----------------{0} in queue!{1} in queue!{2} in queue!{3} in queue!0 has take!{4} in queue!1 has take!{6} in queue!2 has take!{7} in queue!3 has take!{8} in queue!4 has take!{5} in queue!6 has take!{9} in queue!7 has take!8 has take!5 has take!9 has take!----------------------------------------- CompletionService将生产新的异步任务与使用已完成任务的结果分离开来的服务。生产者 submit 执行的任务。使用者 take 已完成的任务,并按照完成这些任务的顺序处理它们的结果。例如,CompletionService 可以用来管理异步 IO ,执行读操作的任务作为程序或系统的一部分提交,然后,当完成读操作时,会在程序的不同部分执行其他操作,执行操作的顺序可能与所请求的顺序不同。通常,CompletionService 依赖于一个单独的 Executor 来实际执行任务,在这种情况下,CompletionService 只管理一个内部完成队列。ExecutorCompletionService 类提供了此方法的一个实现。 import java.util.concurrent.Callable;import java.util.concurrent.CompletionService;import java.util.concurrent.ExecutorCompletionService;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class MyCompletionService implements Callable<String> {private int id; public MyCompletionService(int i){   this.id=i;}public static void main(String[] args) throws Exception{   ExecutorService service=Executors.newCachedThreadPool();   CompletionService<String> completion=new ExecutorCompletionService<String>(service);   for(int i=0;i<10;i++){    completion.submit(new MyCompletionService(i));   }   for(int i=0;i<10;i++){    System.out.println(completion.take().get());   }   service.shutdown();}public String call() throws Exception {   Integer time=(int)(Math.random()*1000);   try{    System.out.println(this.id+" start");    Thread.sleep(time);    System.out.println(this.id+" end");   }   catch(Exception e){    e.printStackTrace();   }   return this.id+":"+time;}} CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回
  • 上一篇资讯: 实战java Concurrent
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号