JUC-并发容器

并发容器

没写好

1. 并发容器概览

2. 并发容器的演进

过时的并发容器

线程安全的ArrayList --- Vector 方法加了synchronized

线程安全的HashMap --- Hashtable 方法加了synchronized

它们都是性能差,它们都是加了synchronized

用Collections.synchronizedList(new ArrayList()) 包装ArrayList底层也是用这个同步代码块实现,也同样会让性能更差。

Collections.synchronizedMap 同理

3. ConcurrentHashMap -面试常考

#### Map简介

  • Hashtable(同步,慢,数据量小)
    • K-V对, K和V都不允许为null
    • 无序的 – 适合小数据量 – 主要方法: clear, contains/containsValue, containsKey, get, put,remove, size
  • HashMap(不支持同步,快,数据量大)
  • Properties (同步,文件形式,数据量小)

为什么需要ConcurrentHashMap

HashMap 的cpu 100%的问题

九层之台,起于累土、罗马不是一天建成的:HashMap的分析

1.7的结构

JDK1.7的ConcurrentHashMap实现和分析

![](E:\笔记资料\JUC\jucimage\JDK1.7的ConcurrentHashMap实现和分析 2.png)

Java 7中的ConcurrentHashMap最外层是多个segment,每个segment的底层数据结构与HashMap类似,仍然是数组和链表组成的拉链法

JDK1.8的ConcurrentHashMap实现和源码

判断key value不为空

计算hash值 根据对应位置节点的类型,来赋值, 或者helpTransfer 或者增长链表 或者给红黑树增加节点 检查满足阈值就“红黑树化” 返回oldVal

计算hash值

找到对应的位置,根据情况进行︰ 直接取值 红黑树里找值 遍历链表取值 返回找到的结果

分析对比JDK1.7和1.8的优缺点,为什么要把1.7的结构改成1.8的结构?

4. CopyOnWriteArrayList

5. 并发队列 阻塞队列,非阻塞队列

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务