快速业务通道

关于java.util.concurrent您不知道的 5 件事,第1部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13
,首先进行测试,然后仅当键没有存储在 Map 中时进行 put。

5. SynchronousQueues

根据 Javadoc,SynchronousQueue 是个有趣的东西:

这是一个阻塞队列,其中,每个插入操作必须等待另一个线程的对应移除操作,反之亦然。 一个同步队列不具有任何内部容量,甚至不具有 1 的容量。

本质上讲,SynchronousQueue 是之前提过的 BlockingQueue 的又一实现。它给我们提供了 在线程之间交换单一元素的极轻量级方法,使用 ArrayBlockingQueue 使用的阻塞语义。在清 单 2 中,我重写了 清单 1 的代码,使用 SynchronousQueue 替代 ArrayBlockingQueue:

清单 2. SynchronousQueue

import java.util.*; import java.util.concurrent.*; class Producer    implements Runnable {    private BlockingQueue<String> drop;    List<String> messages = Arrays.asList(      "Mares eat oats",      "Does eat oats",      "Little lambs eat ivy",      "Wouldn''t you eat ivy too?");    public Producer(BlockingQueue<String> d) { this.drop = d; }    public void run()    {      try      {        for (String s : messages)          drop.put(s);        drop.put("DONE");      }      catch (InterruptedException intEx)      {        System.out.println("Interrupted! " +          "Last one out, turn out the lights!");      }    } } class Consumer    implements Runnable {    private BlockingQueue<String> drop;    public Consumer(BlockingQueue<String> d) { this.drop = d; }    public void run()    {      try      {        String msg = null;        while (!((msg = drop.take()).equals("DONE")))          System.out.println(msg);      }      catch (InterruptedException intEx)      {        System.out.println("Interrupted! " +          "Last one out, turn out the lights!");      }    } } public class SynQApp {    public static void main(String[] args)    {      BlockingQueue<String> drop = new  SynchronousQueue<String>();      (new Thread(new Producer(drop))).start();      (new Thread(new Consumer(drop))).start();    } }

实现代码看起来几乎相同,但是应用程序有额外获益:SynchronousQueue 允许在队列进行 一个插入,只要有一个线程等着使用它。

在实践中,SynchronousQueue 类似于 Ada 和 CSP 等语言中可用的 “会合通道”。这些通 道有时在其他环境中也称为 “连接”,这样的环境包括 .NET 。

结束语

当 Java 运行时知识库提供便利、预置的并发性时,为什么还要苦苦挣扎,试图将并发性导 入到您的 Collections 类?本系列的下一篇文章将会进一步探讨 java.util.concurrent 名称 空间的内容。

原文地址:http://www.ibm.com/developerworks/cn/java/j-5things4.html

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号