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

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模式下时间是非线性增长的。

你可能感兴趣的:(java)