package com.cxy; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import java.util.concurrent.*; /** * Created by Administrator on 2017/4/10. */ public class CxyDemo { // 请求总数 public static int clientTotal = 5000; // 同时并发执行的线程数 public static int threadTotal = 200; //private static Map<Integer, Integer> map = new HashMap<>(); // private static ConcurrentHashMap<Integer, Integer> map = new ConcurrentHashMap<>(); private static Map<Integer, Integer> map = new Hashtable<>(); public static void main(String[] args) throws Exception { //可缓存线程池 ExecutorService executorService = Executors.newCachedThreadPool(); final Semaphore semaphore = new Semaphore(threadTotal); final CountDownLatch countDownLatch = new CountDownLatch(clientTotal); for (int i = 0; i < clientTotal; i++) { final int count = i; //lambda表达式执行任务 executorService.execute(() -> { try { semaphore.acquire(); //执行的业务逻辑,可以模仿http请求,发送高并发 update(count); semaphore.release(); } catch (Exception e) { // log.error("exception" , e); } countDownLatch.countDown(); }); } countDownLatch.await(); executorService.shutdown(); System.out.println(map.size()); //log.info("size:{}" , map.size()); } private static void update(int i) { //向集合中添加数据 map.put(i, i); } }
在以上代码中可以运行看出测试:
hahsmap的多次运行结果不一样
concurrentHashmap结果一定是5000,
hashtable也一定是5000,