synchronized原理分析
解决原子性,可见性,有序性。
-
synchronized是什么?
synchronized后面锁的是一个具体要获得锁的对象。 -
synchronized是如何实现锁的?
每个对象都能实现一个对象监视器(独占锁),因为Java对象天生都带一个监视器。
偏向锁–》轻量级锁–》重量级锁
3.为什么任何一个对象都可以成为锁?
4.锁存在哪个地方?
对象头mark word:存储对象自身运行时的数据。 对象在内存中的一个划分。锁的记录是存在对象头中。
32位对象头:
64位对象头:
源代码: oop.hpp markOop.hpp
每一个Java Object 在Java虚拟机内部都有一个oop/oopDesc对应 Mark .
每一个对象里有个对象头,对象头里面实现了monitor方法,这个方法返回了ObjectMobitor,指针对象。 ObjectMobitor就是对象监视器的实现。
锁的获取过程
自旋锁:
for(;?{
尝试获取锁
}
偏向锁: 锁不仅不存在竞争,而且都是由同一个线程获得。
轻量级锁