HashMap和SynchronizedMap和ConcurrentHashMap性能比较

来源:互联网 发布:chrome浏览器 windows 编辑:程序博客网 时间:2024/05/23 16:51

怎么证明HashMap和SynchronizedMap和ConcurrentHashMap性能优劣


代码如下:

import java.util.Collections;import java.util.HashMap;import java.util.Hashtable;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class HashTableVsSynchronizedMapVsConcurrentHashMap {public final static int THREAD_POOL_SIZE = 5;public static Map<String, Integer> hashTableObject = null;public static Map<String, Integer> synchronizedMapObject = null;public static Map<String, Integer> concurrentHashMapObject = null;public static void main(String[] args) throws InterruptedException {// 测试HashTablehashTableObject = new Hashtable<String, Integer>();performTest(hashTableObject);// 测试synchronizedMapsynchronizedMapObject = Collections.synchronizedMap(new HashMap<String, Integer>());performTest(synchronizedMapObject);        // 测试ConcurrentHashMap        concurrentHashMapObject = new ConcurrentHashMap<String, Integer>();        performTest(concurrentHashMapObject);        }private static void performTest(final Map<String, Integer> map) throws InterruptedException {System.err.println("开始测试 : " + map.getClass());long averageTime = 0;for (int i = 0; i < 5; i++) {long startTime = System.nanoTime();ExecutorService es = Executors.newFixedThreadPool(THREAD_POOL_SIZE);for (int j = 0; j < THREAD_POOL_SIZE; j++) {es.execute(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 500000; i++) {Integer randomNumber = (int) Math.ceil(Math.random() * 550000);map.put(String.valueOf(randomNumber), randomNumber);}}});}es.shutdown();es.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);long entTime = System.nanoTime();long totalTime = (entTime - startTime) / 1000000L;averageTime += totalTime;System.out.println("添加耗时" + totalTime + " ms");}System.out.println("操作 " + map.getClass() + " 平均时间为 " + averageTime / 5 + " ms\n");}}



0 0
原创粉丝点击