synchronized 对象
对象相当于一个key,拥有这个key则可以访问,没有则不能访问,key有两种,一个是对象,一种是类
synchronized 代码块的原理
两个基本概念
java对象头:对象内存分为3类:对象头,实例数据和对齐填充;Synchronized锁放在java对象头,从源码上讲,一个java对应一个oop,oopDesc(定义Synchronized锁)
Monitor:独占锁,同步机制 所有java对象都是一种monitor
Synchronized锁升级和获取过程
解决有序性,可见性和原子性
锁的级别从低到高的过程:无锁-->偏向锁-->轻量级锁-->重量级锁
自旋锁:在一定时间内,没有获取锁,就挂起;目的:通过加长占有处理器的时间来减少线程切换带来的开销
偏向锁:在没有竞争的前提起,一个线程多次获取锁;在获取锁的过程中,若对象头有指向当前线程,则表示获取锁成功,若没有,则开始正常的获取锁的流程。
轻量级锁:多个线程竞争偏向锁会升级为轻量级锁
重量级锁:通过monitor来实现