顺服Tiger: 并发调集[Java编程]
本文“顺服Tiger: 并发调集[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在 Java 编程的早期阶段,位于 Oswego 市的纽约州立大学(SUNY) 的一位传授决意成立一个简单的库,以帮忙开辟人员构建可以更好地处理多线程情形的利用程序.这并非说用现有的库就不能实现,但是就像有了尺度网络库一样,用经过调试的、可托任的库更简单自己处理多线程.在 Addision-Wesley 的一本相关书籍的帮忙下,这个库变得越来越风行了.终究,作者 Doug Lea 决意设法让它成为 Java 平台的尺度部份 —— JSR-166.这个库最后变成了 Tiger 版本的 java.util.concurrent 包.在这篇新的 顺服 Tiger 本领中,我们将探究 Collection Framework 中新的 Queue 接口、这个接口的非并发和并发实现、并发 Map 实现和专用于读操作大大超越写操作这种情形的并发 List 和 Set 实现.
介绍 Queue 接口
java.util 包为调集供应了一个新的基本接口: java.util.Queue .固然必定可以在相对应的两头举行增添和删除而将 java.util.List 作为行列对待,但是这个新的 Queue 接口供应了支持增添、删除和查抄调集的更多办法,以下所示:
public boolean offer(Object element)
public Object remove()
public Object poll()
public Object element()
public Object peek()
基本上,一个行列就是一个先入先出(FIFO)的数据构造.一些行列有大小限制,因此假如想在一个满的行列中加入一个新项,多出的项就会被回绝.这时新的 offer 办法便可以起作用了.它不是对调用 add() 办法抛出一个 unchecked 非常,而只是得到由 offer() 返回的 false. remove() 和 poll() 办法都是从行列中删除第一个元素(head). remove() 的行为与 Collection 接口的版本类似,但是新的 poll() 办法在用空调集调用时不是抛出非常,只是返回 null.因此新的办法更合适简单呈现非常条件的情形.后两个办法 element() 和 peek() 用于在行列的头部查询元素.与 remove() 办法近似,在行列为空时, element() 抛出一个非常,而 peek() 返回 null.
利用基本行列
在 Tiger 中有两组 Queue 实现:实现了新 BlockingQueue 接口的和没有实现这个接口的.我将首先解析那些没有实现的.
在最简单的情形下,本来有的 java.util.LinkedList 实现已经改革成不但实现 java.util.List 接口,并且还实现 java.util.Queue 接口.可以将调集当作这二者中的任何一种.清单 1 显示将 LinkedList 作为 Queue 利用的一种办法:
清单 1. 利用 Queue 实现
Queue queue = new LinkedList();
queue.offer("One");
queue.offer("Two");
queue.offer("Three");
queue.offer("Four");
// Head of queue should be One
System.out.println("Head of queue is: " + queue.poll());
再复杂一点的是新的 java.util.AbstractQueue 类.这个类的工作方法近似于 java.util.AbstractList 和 java.util.AbstractSet 类.在成立自定义集合时,不用自己实现整个接口,只是担当抽象实现并填入细节.利用 AbstractQueue 时,必须为办法 offer() 、 poll() 和 peek() 供应实现.像 add() 和 addAll() 这样的办法改正成利用 offer() ,而 clear() 和 remove() 利用 poll() .最后, element() 利用 peek() .当然可以在子类中供应这些办法的优化实现,但是不是必须这么做.并且,没必要成立自己的子类,可以利用几个内置的实现, 此中两个是不阻塞行列: PriorityQueue 和 ConcurrentLinkedQueue .
PriorityQueue 和 ConcurrentLinkedQueue 类在 Collection Framework 中加入两个具体调集实现. PriorityQueue 类实质上保护了一个有序列表.加入到 Queue 中的元素按照它们的自然排序(通过其 java.util.Comparable 实现)大概按照传送给构造函数的 java.util.Comparator 实现来定位.将清单 2 中的 LinkedList 改变成 PriorityQueue 将会打印出 Four 而不是 One,因为按字母布列 —— 字符串的自然次序 —— Four 是第一个. ConcurrentLinkedQueue 是基于链接节点的、线程安全的行列.并发拜候不需求同步.因为它在行列的尾部增添元素并重新部删除它们,所以只要不需求知道行列的大小, ConcurrentLinkedQueue 对大众调集的同享拜候便可以工作得很好.汇集关于行列大小的信息会很慢,需求遍历行列.
以上是“顺服Tiger: 并发调集[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:J2EE的构造
- ·下一篇文章:顺服Tiger: 操作Tiger为窗格减压
- ·中查找“顺服Tiger: 并发调集”更多相关内容
- ·中查找“顺服Tiger: 并发调集”更多相关内容