[关闭]
@yudesong 2018-02-12T03:05:32.000000Z 字数 1763 阅读 821

Java 锁机制

Java


Java中锁的分类

在多线程的加锁机制中,JVM会首先尝试乐观锁,失败后才调用悲观锁。

对象的内存分布

在HotSpot虚拟机中,对象在内存中的存储布局分为三部分:对象头、实例数据、对其填充。

对象头(Mark Word)

锁的升级与对比

Java SE 1.6种锁一共有四种状态,级别从低到高:无锁状态、偏向锁、轻量级锁、重量级锁。随着竞争的情况逐渐升级,但不能降级。
* 偏向锁
顾名思义,就是偏向于当前已经占有锁的线程。如果在运行过程中,同步锁只有一个线程访问,不存在多线程争用的情况,则线程是不需要触发同步的,这种情况下,就会给线程加一个偏向锁。如果在运行过程中,遇到了其他线程抢占锁,则持有偏向锁的线程会被挂起,JVM会消除它身上的偏向锁,将锁恢复到标准的轻量级锁。

-XX:+UseBiasedLocking

在JDK1.6中,Java虚拟机提供-XX:+UseSpinning参数来开启自旋锁,使用-XX:PreBlockSpin参数来设置自旋锁等待的次数。
在JDK1.7开始,自旋锁的参数被取消,虚拟机不再支持由用户配置自旋锁,自旋锁总是会执行,自旋锁次数也由虚拟机自动调整。

锁优化

参考文献
1. https://www.cnblogs.com/charlesblc/p/5994162.html
2. https://www.jianshu.com/p/78cf35f01b2f
3. http://www.cnblogs.com/think-in-java/p/5520462.html

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注