JAVA复习资料

复习资料

1. JAVA锁机制
根据是否要锁住同步资源分为 悲观锁和乐观锁,锁住资源失败了,不阻塞分为自旋锁和适应性自旋锁;针对synchronized进行了锁的优化:无锁->偏向锁->轻量级锁->重量级锁。
2. Set与List
Set是通过HashMap来实现,value存储一个Object,List是通过数组的形式存储,jdk1.8无参数初始化,默认长度是0,当真正对数组进行添加时,才真正分配容量。每次按照1.5倍(位运算)的比率通过copeOf的方式扩容。 在JKD1.6中实现是,如果通过无参构造的话,初始数组容量为10,每次通过copeOf的方式扩容后容量为原来的1.5倍。

3. HashMap&ConcurrentHashMap 的实现原理
HashMap是采用链表+数组的形式存储数据,主要是解决hash冲突。
ConcurrentHashMap 采用了 CAS + synchronized 来保证并发安全性。
put流程:

  1. 根据 key 计算出 hashcode 。
  2. 判断是否需要进行初始化。
  3. f 即为当前 key 定位出的 Node,如果为空表示当前位置可以写入数据,利用 CAS 尝试写入,失败则自旋保证成功。
  4. 如果当前位置的 hashcode == MOVED == -1,则需要进行扩容。
  5. 如果都不满足,则利用 synchronized 锁写入数据。
  6. 如果数量大于 TREEIFY_THRESHOLD 则要转换为红黑树。

4.volatile
volatile的有序性是通过插入内存屏障来保证指令按照顺序执行,volatile 关键字只能保证可见性,顺序性,不能保证原子性。

4.synchronized
synchronized 的有序性是持有相同锁的两个同步块只能串行的进入,即被加锁的内容要按照顺序被多个线程执行,但是其内部的同步代码还是会发生重排序,使块与块之间有序可见。
synchronized 是不能保证指令重排的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值