Java集合
can_chen
自知无知,永远求知!
展开
-
线程安全的集合——ConcurrentHashMap
为什么HashMap集合是线程不安全的?① 同时put碰撞导致数据丢失:多个线程同时执行put操作,计算出来的hashcode值相等,插入到同一位置导致有的数据被覆盖② 同时put扩容导致数据丢失:多个线程执行put操作时同时发现需要扩容,也会发生数据丢失③ 死循环导致CPU100%ConcurrentHashMap JDK1.7的底层实现Java 7中的ConcurrentHashMap最外层是多个segment,每个segment的底层数据结构与JDK 1.7的HashMap类似,是基于数组加原创 2020-09-19 22:07:54 · 469 阅读 · 1 评论 -
面试高频——HashMap
HashMap 是使用频率最高的集合,在面试中也经常会被问到,对于HashMap的学习是通过看源码以及看一些视频的讲解,来加深巩固对这个集合的理解,因为HashMap的内容非常多,涉及的知识点也很多,这篇博客只是整理了一些常见的面试题和列出重要的部分源码,仅供参考!1. HashMap的底层实现原理要了解HashMap的底层实现原理,需要先对哈希表有一定的认识,关于哈希表的知识,可以参考上一篇...原创 2020-04-12 12:41:48 · 314 阅读 · 0 评论 -
BlockingQueue(阻塞队列)
BlockingQueue是一个接口,继承于Queue接口,而Queue接口又继承于Collection;BlockingQueue接口常用的实现类有ArrayBlockingQueue(基于数组实现)和LinkedBlockingQueue(基于链表实现),BlockingQueue四组常用的API是:1. 操作队列失败时会抛出异常add(入队/添加,当队列满的时候抛出异常)remove(出队/删除,当队列空的时候抛出异常)element(查看队首元素,当队列空的时候抛出异常)2. 操作队列失原创 2020-09-19 21:28:20 · 252 阅读 · 0 评论 -
CopyOnWriteArrayList和CopyOnWriteArraySet
对于ArrayList和HashSet集合,都是线程不安全的,在并发操作下会出现问题,报出ConcurrentModificationException(并发修改异常),虽然他们也有对应的线程安全类,例如ArrayList对应有Vector,是线程安全的,但是看了底层源码都知道,Vector类底层的很多方法都是加了synchronized关键字去加锁实现线程安全,这样一来会导致效率非常低下,所以在并发操作下,一般也不会去使用它集合工具类Collections里面给我们提供了可以将线程不安全的类转换为线程安原创 2020-09-19 21:21:10 · 413 阅读 · 0 评论