栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

1) 2021-11-15 学习记录,以面试回答口吻记录,拒绝八股 1.锁的隔离级别 2.CAS(个人总结用)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1) 2021-11-15 学习记录,以面试回答口吻记录,拒绝八股 1.锁的隔离级别 2.CAS(个人总结用)

2021-11-15 学习记录(有错提出,期望每天进步一点) 1.锁的隔离级别

无锁 -> 偏向锁 -> 轻量级锁 ->重量级锁
偏向锁一般用不上,默认是延迟4秒开启的,通过下面这个JVM参数可以讲延迟设置为0.
-XX:BiasedLockingStartupDelay=0,同一个线程调用,如果有线程竞争就会锁升级,轻量级锁可以认为就说自旋锁,自旋锁一般为10次,是指暂时得不到对象的锁,然后自己自旋循环等待获得锁,如果循环十次锁就会升级成重量级锁,自旋锁是线程安全和性能的综合考虑。重量级锁是代表有线程竞争时,例如synchronized修饰,就是一种重量级锁。体现为markword对象头,可添加jdk-jol依赖,ClassLayout打印对象头。重量级锁 010 轻量级锁 000 偏向锁 101 无锁 001 GC 111。。Synchronized在单个线程使用锁,输出的其实是轻量级锁的Mark word头,在涉及线程竞争的时候变成010重量级锁。

2.CAS

比较并交换,乐观锁,CAS(要操作的内存变量,期待值,要修改的值)返回布尔类型。
会遇到ABA问题,这个时候可以使用Atomic原子类的 AtomicMarkableReference(通过布尔类型返回是否被修改过) 和 AtomicStampedReference (通过int值的计数反映是否被修改过)

 Atomi类 主要通过volatile和CAS (compare and swap) 和native方法来实现,避免synchronized的开销,CAS的底层则是,Unsafe的objectOffeset()的本地方法,这个方法返回原来地址的内存值,拿这个值和预期的值比较,valueOffset,value是一个volatile变量,因此可以保证任何时候JVM拿到的都是value的最新值。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531346.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号