集合
一颗小小的石头.
这个作者很懒,什么都没留下…
展开
-
CopyOnWriteArrayList set方法中的 Not quite a no-op; ensures volatile write semantics
背景:CopyOnWrite技术即写时复制,原理在网上一大堆了,关于CopyOnWriteArrayList的 set方法中(420行) 为什么即使没有发生任何变化,也要 setArray 一下? 需要去刷新volatile所修饰的数组引用吗?探索:网上解析很多,但核心其实就一点:这不是为了保证CopyOnWriteArrayList本身的可见性,\color{red}{这不是为了保证...原创 2019-11-30 20:52:31 · 594 阅读 · 0 评论 -
ArrayList构造函数 c.toArray might (incorrectly) not return Object[] (see 6260652)
问题:在ArrayList或者CopyOnWriteArrayList等源码中,以Collection为参数的构造方法中为什么会出现红框中的判断呢,难道c.toArray()返回的还不一定是Object类型的数组?探究:打开 c.toArray的源码,发现是接口,我们随便找一个实现类,就例如最常见的ArrayList吧注意,这里的elementData是ArrayList的内部数组,它...原创 2019-11-30 15:01:52 · 375 阅读 · 0 评论 -
Java LRU的两种实现
LRU 最近最久未使用,是一种常用的淘汰算法,广泛应用与OS内存页面调度,Redis缓存淘汰策略,等等。在Java中有两种实现方式,一个是直接利用JDK已有的 LInkedHashMap ,一个是自己手写 DoubleLinkedList 结合HashMap。一:利用JDK方法public class LRU<K,V> extends LinkedHashMap<K,V>...原创 2019-11-22 14:23:26 · 628 阅读 · 0 评论 -
java用迭代器时修改集合一定会触发Fast-fail机制?
已经有很多帖子分析了Fast-fail机制,就不累述了。往往我们喜欢把知识点提炼成最精简的话语放到大脑里,就是Fast-fail机制是为了防止迭代器进行集合迭代过程中对集合元素进行增加或删除(包括单线程和多线程),保证数据一致性但事实真的这么简单?看个小demo运行可以发现,移除 “hello” 或 “java” 都会引发 ConcurrentModificationException异常...原创 2019-11-19 21:32:40 · 207 阅读 · 0 评论
分享