并发编程技术之J.U.C中的并发容器——七个面试知识点

点关注,不迷路;持续更新Java架构相关技术及资讯热文!!!

眼尖的朋友可能还看见了此博客页面左上角还有惊喜哟

面试题

1. Java集合框架以及J.U.C框架中列举List、Set、Map的实现?

集合框架

  • List

    • ArrayList
    • LinkedList
  • Map

    • HashMap
  • Set

    • HashSet
    • TreeSet

J.U.C框架

  • List

    • CopyOnWriteArrayList
  • Set

    • CopyOnWriteArraySet
    • ConcurrentSkipListSet
  • Map

    • CocurrentHashMap
    • ConcurrentSkipListMap

2. 如何把普通集合转化成线程安全的?

Collections#synchronized* 方法返回,此方式是采用Wrapper设计模式,方法都被synchronized进行修饰

J.U.C中提供的框架类中都提供构造方法进行转化。 如 CopyOnWriteArrayList(list)、 CopyOnWriteArraySet(set)、CocurrentHashMap(map)

3. List、Vector、CopyOnWriteArrayList的相同点和不同点?

Vector、CopyOnWriteArrayList都是List的实现类。

  • 相同点: 在读时不加锁,在写时加锁。
  • 不同点: Vector的iterator的实现是fail-fast,而CopyOnWriteArrayList的iterator是弱一致的实现,在while时不会报错

4. Collections#synchronizedList与Vector的相同点和不同点

  • 相同点: 都是加锁实现(synchronized)
  • 不同点: 一个返回List一个返回Vector,synchronizedList是一个Wrapper实现

5. Arrays#asList是线程安全的吗?有没有替代方案?

不是线程安全的,元素不可扩容但元素内容可修改

替代方案: List.of 方法(jdk9+)

6. Hashtable、HashMap、ConcurrentHashMap的区别?

  • Hashtable: key 和value都不可以为空,实现是数组+链表的方式,读写都有锁
  • HashMap: key和value都 可以为空,实现是数组,读写都没有锁
  • ConcurrentHasMap: key和value都不可以为空,实现是链表+红黑树(阈值=8时),读不加锁,写时加锁

7. ConcurrentHashMap、ConcurrentSkipListMap优点和缺点?

  • ConcurrentHashMap: 在读不加锁,写时加锁,内存占用比较小
  • ConcurrentSkipListMap: 读写都不加锁,内存占用比较大实现以空间换时间,高性能

以上是根据个人理解做了分析,如有不正确请留言讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值