摘要: 一、方法一 final void lock() { //第一个线程获取锁,如果成功,则直接返回,这种情况是最快的 if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThread()); else //如果不是第一个 阅读全文
posted @ 2020-09-23 17:01 码来 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 一、JMH是什么? JMH是Java性能测试工具,主要是对工程中一些方法进行一些基准测试,支持的时间单位为:nano / micro / milli / macro 二、JMH使用案例-代码: 1 POM文件 <dependencies> <dependency> <groupId>junit</g 阅读全文
posted @ 2020-09-23 16:57 码来 阅读(4302) 评论(0) 推荐(0) 编辑
摘要: 一、重量锁的数据结构 1、 Synchronized升级到重量锁以后,会创建一个ObjectMonitor对象,对象中会有:当前持有锁的线程、WaitSet(保存处于Waiting状态的线程)、EntryList(保存处于Blocked状态的线程) 2、重量锁本质:重量锁使用操作系统底层的 Mute 阅读全文
posted @ 2020-09-23 16:53 码来 阅读(623) 评论(0) 推荐(0) 编辑
摘要: 一、JVM参数设置参考 关闭延迟:-XX:BiasedLockingStartupDelay=0 设置JVM关闭偏向锁:-XX:UseBiasedLocking=false 打印JVM启动参数: -XX:+PrintFlagsFinal 二、释义 1 批量重偏向锁:当对某个类的对象偏向锁批量撤销20 阅读全文
posted @ 2020-09-23 16:52 码来 阅读(1197) 评论(0) 推荐(1) 编辑
摘要: (锁源码文件:bytecodeInterpreter.cpp) 问题: 1 偏向锁加锁前,加锁中,加锁后头变化 2 偏向锁升级轻量级锁,升级前,轻量锁,和轻量级锁完成对象头变化 结论: 1 偏向锁加锁前,对象头标识 101,没有保存线程ID 2 偏向锁加锁 ,对象头标识101,保存线程ID(1 当前 阅读全文
posted @ 2020-09-23 16:46 码来 阅读(949) 评论(0) 推荐(0) 编辑