摘要:arraylist: 底层object数组, ensureCapcityInternal 判断是否数组扩容 copyonwritearraylist: copyonwrite机制: 当进行资源写入时,系统生成资源副本进行修改。保证写入原子性。写入加锁 hashset: 底层实现:hashmap K+
阅读全文
摘要:HashMap: jdk1.7 底层存储 entry数组 查询使用hash表算法 h&(lenght-1) 取模计算数组下标 下标相同,组成链表,顺序查找 k,v总数超过一定比例 引发数组扩容 负载因子*length 扩容方法 transfor 遍历全部元素 重新取模 放入数组 扩容中无法保证数据问
阅读全文
摘要:1、缓存雪崩、缓存击穿之类的问题。 2、锁降级的情况。 写锁内部追加读锁(读写互斥的特例 ,必须同一个线程); 模板方法模式: 抽取公共代码。 jdk中使用链表实现队列。 普通队列使资源排队。 AQS使用追加的逻辑让线程排队 jdk AQS中只有一个int state 读写锁进行位操作 前2字节 后
阅读全文
摘要:Lock接口 lock() 没完没了的试 挂起 trylock() 一次不成就算了 trylock(time,timeunit) 超时后就算了 lockinterruptibly() 被动等通知 可中断 newCondition 等待池。如果唤醒和挂起倒置 会死锁 reentrantL lock()
阅读全文
摘要:自旋锁:循环等待,不断尝试获取,成功后退出。 乐观锁: 修改数据时发现数据变化则重读数据并修改 假定不冲突 悲观锁:从读数据开始就加锁 -- 假定冲突 独占锁:一把用写,其他线程不能加锁。 共享锁:读,可以加读锁,但不能加写锁。 (不)可重入锁:已经获取锁的线程未释放前重新获取锁,是否阻塞。reen
阅读全文
摘要:1、i++javap后的指令码,分别为操作数栈内 堆内存取i, 存入常量1,执行加法,写回堆内存多步操作。非原子性,会有线程问题。 处理办法,加锁(synchronize,ReentrantLock)或者atomicInteger。 或者使用cas(compare and swap)操作(-硬件同步
阅读全文