Monitor
偏向锁(理解可能不太对)
对象头后三位为101(表示对象可偏向)。
对象头里54位写有线程id(线程1),线程2获得这个对象锁时,会撤销偏向锁,撤销超过20次后,会改变对象头里的线程id为线程2,如果线程3又来访问,撤销总计超过40次,这个类会被设置为不可偏向。
偏向锁升级:(1)不同线程使用一个对象
(2)调用对象hashcode方法
会将101设置为01,表示不可偏向
为偏向锁撤销,撤销超过20次,且这20次是因为同一个对象撤销的,则会重偏向,
撤销超过40次,整个类会设置为不可偏向,新建的对象也设置为不可偏向
锁消除
一般代码错误会出现,JIT发现锁的变量不是共享变量,就会将锁优化为没有锁
synchronized和Lock区别
ConcurrentHashMap
size,分段扩容,锁机制