JDK中ConcurrentHashMap效率测试

 比较HashMap HashTable 和ConcurrentHashMap的效率.

一般情况下,达到一定的数量之后JDK1.5之后提供的ConcurrentHashMap集合类的效率是前两者的3~4倍左右.

前两种集合类的效率比较接近. 

 ConcurrentHashMapTest.java

 1 import java.util.Collections;
 2 import java.util.HashMap;
 3 import java.util.HashSet;
 4 import java.util.Hashtable;
 5 import java.util.Map;
 6 import java.util.concurrent.ConcurrentHashMap;
 7 
 8 //测试三种并发集合的读写效率
 9 public class ConcurrentHashMapTest {
10 
11     public static void main(String[] args) {
12         //HashMap不是线程安全的,通过 Collections.synchronizedMap()转换成线程安全的.
13         final Map<Integer, Integer> hm = Collections.synchronizedMap(new HashMap<Integer, Integer>());
14         //HashTable内部自带同步,线程安全的.
15         final Map<Integer, Integer> ht = new Hashtable<Integer, Integer>();
16         //JDK1.5之后提供的并发集合.
17         final Map<Integer, Integer> chm = new ConcurrentHashMap<Integer, Integer>();
18         putMap(hm);//输出:13321
19         putMap(ht);//输出:11834
20         putMap(chm);//输出:8312  数据量达到一定程度之后,会比前两种快3~4倍左右.
21         
22     }
23 
24     private static void putMap(final Map<Integer, Integer> hm) {
25         long begin = System.currentTimeMillis();
26         for (int k = 0; k < 100; k++) {//为了让效果更明显,再循环100次.
27             for (int i = 0; i < 1000; i++) {//1000条线程
28                 final int key = i;
29                 new Thread(new Runnable() {
30                     @Override
31                     public void run() {
32                         for (int j = 0; j < 1000; j++) {//每条线程向其中添加1000次
33                             hm.put(key, j);
34                         }
35                     }
36                 }).start();
37             }
38         }
39         long end = System.currentTimeMillis();
40         System.out.println(end - begin);
41     }
42 }
原文地址:https://www.cnblogs.com/DreamDrive/p/6209275.html