Java并发容器Map类有两个,ConcurrentHashMap和ConcurrentSkipListMap,前者是无序的,后者有序。
public class ConcurrentHashMapTest { private static final int len = 20; public static void main(String[] args) { ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>(); CountDownLatch latch = new CountDownLatch(len); Thread[] threads = new Thread[len]; Random rd = new Random(); for (int i=0; i<len; i++) { threads[i] = new Thread(()->{ for (int j=0; j<100; j++) { map.put(Thread.currentThread().getName()+" " + j, ""+j); } latch.countDown(); }); } long startTime = System.currentTimeMillis(); for (int i=0; i<len; i++) { threads[i].start(); } try { latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } long endTime = System.currentTimeMillis(); System.out.println(map.size()); System.out.println(endTime - startTime); } }
执行上述代码输出:
2000
33
将ConcurrentHashMap 换成 ConcurrentSkipListMap,一样得到map的 size 大小为 2000。