博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中如何选择Collection Class--java线程(第3版)
阅读量:6327 次
发布时间:2019-06-22

本文共 1308 字,大约阅读时间需要 4 分钟。

hot3.png

        使用哪一个collection是最好的?很明显,没有单一的答案可以适合所有的状态。无论如何,以下还是有一些通用的建议。遵循这些建议,我们就可以缩小collection的选择范围。

  • 使用collection class 的时候,通过接口来运用

    如同所有的java程序设计,接口可以隔离开实现的细节。通过使用接口,程序设计师可以轻易地只以修改初始程序代码就将程序重构成使用不同collection的实现。

  • 使用没有被同步化过的collection会有小小的性能提升

    这可能会让许多开发者吃惊---要了解lock取得的性能问题,详见第14章。简单地说,取得lock的性能问题只会发生在竞争的时候。然而,没有被同步化过的collection应该不会竞争lock。如果确实有竞争,那么race condition的问题的可能性会比性能要高。

  • 对许多有竞争的算法,考虑改用并发的collection

    在J2SE5.0中加入的set、hashmap与list collection 有高度的最佳化。如果程序的算法适用其中一种interface,就要考虑J2SE5.0的collection来替换被同步化过的JDK1.2班的collection。并发的collection对多线程的访问有更好的最优化。

  • 对生产者/消费者模式的程序,考虑使用queue来作为collection

    queue最适合生产者/消费者模式是有许多原因的。首先,queue提供对请求的排序,可以防止数据饥饿。第二,queue被高度地最佳化过,有最少的同步、atomic的访问以及在许多情况下甚至可以安全的并行访问。使用这些collection,大量的线程也可以并行地运作 而只有在对queue的访问上有小小的瓶颈。

  • 如果可能的话,尽量减少明确同步的使用。iterator与其他需要遍历过整个collection的支持性method可能会比collection提供更多的同步。当有许多线程涉入的时候这可能会是个问题。

  • 限制对copy-on-write这类collection使用iterator

    首先,只在collection的元素数量很少的时候使用这些class,这是由于copy-on-write操作所需要的时间与空间。其次,你的程序不需要collection有最新的信息,iterator只带有创建时间点上的collection的信息而已。

  • 考虑使用多个collection

    虽然某些collection有最小的同步,但在有多个线程涉入的时候这些同步过程还是有问题。考虑使用

多个分段的collecton的算法来代替多个线程使用同一个collection的一般实现方式。

set与map间有少许的差异

理论上,set与map有好几个方面的差异,但以实现的观点来说,只有一点点的不同。许多set collection就是用map collection实现出来的。这意味着选择实际上并不是选择:存储在set中的元素几乎就是在map中存储的key。

转载于:https://my.oschina.net/doctor2014/blog/396430

你可能感兴趣的文章
Android中实现iPhone开关
查看>>
是男人就下100层【第二层】——帮美女更衣(1)
查看>>
Web应用程序设计十个建议
查看>>
//……关于报文
查看>>
C语言学习-进制转换、变量
查看>>
Base64编码及其作用
查看>>
20172304 2017-2018-2 《程序设计与数据结构》实验五报告
查看>>
第六周学习总结
查看>>
20个数据库设计的最佳实践
查看>>
C# async
查看>>
C语言博客作业02--循环结构
查看>>
图片时钟
查看>>
Unity-2017.3官方实例教程Space-Shooter(一)
查看>>
makefile中重载与取消隐藏规则示例
查看>>
Linux 内核版本号查看
查看>>
4-3 简单求和 (10分)
查看>>
Python环境部署
查看>>
[BZOJ1927]星际竞速(费用流)
查看>>
为运维人员插上腾飞更远的翅膀!
查看>>
Word 2003中编辑标记与格式标记大讨论
查看>>