什么时候用ConcurrentHashMap
1、以后Map 怎么用
单线程用HashMap 多线程并发读写的时候用 ConcurrentHashMap
public class CurrentHashMapDemo {
public static void main(String[] args) {
//判断当前机器最大的处理器数 就是看看是几核的cpu
System.out.println(Runtime.getRuntime().availableProcessors());
int num = Runtime.getRuntime().availableProcessors();
ThreadPoolExecutor excutors = new ThreadPoolExecutor(
1,
num,
1000, //超时等待的时间,就是345 中的窗口 这段时间没有人办理业务就要关闭,释放线程了。
TimeUnit.SECONDS,
new LinkedBlockingQueue(3),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardOldestPolicy());//其中的一个拒绝策略,
// Map map = new HashMap<>();
// Map map = new Hashtable();
// Map map = Collections.synchronizedMap(new HashMap<>());
Map map = new ConcurrentHashMap();
try{
for (int i = 0; i < 94; i++) {
excutors.execute(()->{
System.out.println(Thread.currentThread().getName()+"======ok");
map.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,5));
System.out.println(map);
});
}
}catch (Exception e){
e.printStackTrace();
}finally {
excutors.shutdown();
}
}
}
2、什么时候用ConcurrentHashMap
并发写的时候用,以及并发读写的时候用