比较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 Maphm = Collections.synchronizedMap(new HashMap ());14 //HashTable内部自带同步,线程安全的.15 final Map ht = new Hashtable ();16 //JDK1.5之后提供的并发集合.17 final Map chm = new ConcurrentHashMap ();18 putMap(hm);//输出:1332119 putMap(ht);//输出:1183420 putMap(chm);//输出:8312 数据量达到一定程度之后,会比前两种快3~4倍左右.21 22 }23 24 private static void putMap(final Map 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 @Override31 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 }