`
zhang_xzhi_xjtu
  • 浏览: 538289 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[code] 大量只读线程安全的FastHashMap

    博客分类:
  • java
阅读更多
org.apache.commons.collections.FastHashMap是java.util.HashMap的一个实现。

其适用的环境是有大量的读,而很少有map结构的改动的环境,并且在这种环境下为线程安全。

它之所以快,是因为在读取的时候是不加锁的。

而改动分三步:1 克隆现有map 2 改动克隆map 3 用克隆map替换现有map。



FastHashMap是有两种运行模式的,fast和slow,其初始的模式是slow的,所有的操作都要获得锁才能进行,以保证其线程安全。若在FastHashMap初始化之后不设置成fast模式,则没有利用FastHashMap的高速只读功能。

这个是测试结果

mapsize, thread number, read time, time(ms)
-------------result--------------

10000 50  10000    1921
10000 50 100000   18435
10000 50 200000   36274
10000 50 500000   89853

10000 100  10000   3718
10000 100 100000  36291
10000 100 200000  71922
10000 100 500000 181487

-------------result--------------
10000 50  10000     359
10000 50 100000    1187
10000 50 200000    2250
10000 50 500000    5671

10000 100  10000    390
10000 100 100000   2765
10000 100 200000   5952
10000 100 500000  19120

可以看出
1 fast模式比slow模式的性能高的多。
2 slow模式下时间是线性增长的,而fast模式下时间是非线性增长的。
分享到:
评论

相关推荐

    Android SQLite Sample Code

    - 在UI线程安全地加载数据,避免阻塞主线程。 - `LoaderManager`负责管理`Loader`,`CursorLoader`用于加载`Cursor`数据。 10. **适配器和ListView显示数据** - 将`Cursor`数据绑定到`CursorAdapter`,然后将`...

    21-C-ImmutableObject-Code.zip

    在编程领域,不可变对象(Immutable Object)是一种重要的设计模式,尤其在多线程和并发环境中,它提供了安全性和性能优化。在这个初学者教程中,我们将深入探讨C#中的不可变对象,包括“内部不变性”和“观察不变性...

    安全搜索进程内存

    6. **并发与同步**:在多线程环境中,搜索内存需要考虑线程安全。如果多个线程同时操作同一块内存,可能会导致数据不一致。使用锁或其他同步机制来确保操作的原子性。 7. **内存遍历策略**:高效的内存搜索算法也很...

    proxy:代理程序包的源代码的只读存储库-Proxy source code

    通过研究源代码,你可以学习到如何处理网络I/O、解析HTTP协议、实现线程安全等高级话题。此外,还可以借此机会学习如何编写高质量的测试用例、如何组织代码结构以及如何遵循开源社区的贡献规则。 总之,这个代理...

    ftp-server-code.rar_4 3 2 1_FTP SERVER_c 文件上传_ftp 上传

    每个用户可以有不同的权限,例如只读或读写访问特定目录。 4) **上传速率限制**: 为了防止大文件上传导致服务器带宽被过度占用,FTP服务器可以设置上传速率限制。这通常通过在数据传输过程中实施某种形式的流量...

    关于 Java Collections API 您不知道的 5 件事,第 2 部分

    Collections API 提供了一些线程安全的集合实现,如`ConcurrentHashMap`, `CopyOnWriteArrayList`, 和 `ConcurrentSkipListMap`。这些类在多线程环境中能保证并发访问的安全,但要注意它们的设计目标和性能特性,...

    Python编程实践gwpy2-code

    在本压缩包“Python编程实践gwpy2-code”中,主要涵盖了Python编程的相关实践内容。Python作为一种高级编程语言,以其简洁、易读的语法特性深受程序员喜爱,广泛应用于数据分析、科学计算、网络爬虫、机器学习等多个...

    java面试技术题库

    11. HashMap和Hashtable都是键值对存储,HashMap非线程安全,允许null键值,而Hashtable线程安全,不接受null键值。 12. final修饰变量表示不可修改,finally用于确保代码块始终执行,finalize是对象被垃圾收集前...

    Btree-source-code:C中高并发B树源代码的工作项目-Source code

    多根节点子目录中正在研究的一个想法通过创建最新更新的根版本的只读副本来消除根节点上的锁定负载。 根被带外更新。 在子目录中,正在开发新的B树页面管理代码,该代码使用跳过列表而不是用于键搜索的排序数组。 ...

    SD-CodeCheck

    ,只读。 只有SonarSourcers可以创建票证。 下一个要发布的版本的 有问题或反馈吗? 有关支持问题(“我如何?”,“我遇到此错误,为什么?”,...),请首先阅读,然后前往。 有可能您已经回答了与您相似的问题...

    学习Java时自己整理的知识点_1

    根据提供的文件信息,这里将对Java中的几个关键概念进行详细解释与分析,这些概念包括堆(heap)、栈(stack)、数据段(data segment)以及代码段(code segment)。 ### 一、堆(Heap) 堆是Java运行时环境中的一部分,...

    代码Review 文档

    代码审查(Code Review)是软件开发过程中的一个重要环节,它旨在提高代码质量,发现潜在的错误,提升团队协作效率,以及传播最佳实践。以下是一些关键的代码审查知识点,基于提供的文档内容: 1. **定期进行Code ...

    Linux操作系统错误代码解释 (中英文对照).pdf

    这通常是在多线程环境中发生的。 **37. OS error code 36: Filename too long** - **中文解释**:文件名太长 - **描述**:当文件名长度超过了文件系统支持的最大长度时返回此错误。可以通过缩短文件名来解决。 **...

    [itpub.net]Toad for Oracle 红宝书(常用技巧与常见疑问解答)

    Toad编辑器还提供了多种辅助功能,例如调整字体、使用快捷键、以颜色标识数据库连接、快速启动、多线程执行以及只读数据库连接等。这些功能大大提升了用户的使用便利性,尤其是在进行大规模代码开发或维护时。 7. ...

    TMS320 DSP Algorithm Standard Rules and Guidelines

    - **线程**:介绍了如何在DSP上实现线程安全的编程模型。 - **抢占式与非抢占式多任务处理**:区分了两种不同的并发处理方式及其适用场景。 - **重入性**:讨论了如何设计可重入的函数,以支持多线程环境下的正确...

    advanced-java-collections:高级Java课程-集合框架的源代码-Source code collection

    使用`Collections.unmodifiable*()`、`Collections.synchronized*()`等工厂方法,可以创建只读或线程安全的集合视图,增强代码的安全性。 10. **自定义集合**: 学习如何通过实现集合接口或继承现有类来自定义...

    PE文件结构详解_超详细_C代码.doc

    - **内存保护**:通过设置节的属性,如只读、执行或非执行等,操作系统可以限制代码和数据的访问权限。 - **导入/导出表**:允许程序之间进行安全的动态链接,同时减少了攻击面。 #### 五、PE文件与线程局部存储 ...

    Microsoft编写优质无错C程序秘诀.zip

    8. **使用const关键字**:通过const限定符来声明常量和只读对象,防止意外修改,提高代码安全性。 9. **类型安全**:避免隐式类型转换,特别是在指针和整型之间的转换。使用强制类型转换时要谨慎,以防止数据丢失或...

    C#基础全接触

    这有助于提高多线程环境中的安全性。C#提供了丰富的字符串操作方法,例如字符串连接、分割等。 #### 异常处理 - **`as` 运算符**: 当尝试将一个对象转换为另一个类型时,`as` 运算符可以安全地进行类型转换,如果...

Global site tag (gtag.js) - Google Analytics