偏向锁
是为了在资源没有被其他线程竞争的情况下尽量减少锁带来的性能开销。
在锁对象的对象头中有一个ThreadId字段,当第一个线程访问锁时,
如果该锁没有被其他线程访问,即ThreadId字段为空,那么JVM让其持有偏向锁,
并将ThreadId字段的值设置为该线程的ID。
当下次获取锁时,会判断当前线程的ID是否与锁对象的ThreadID的值一致。
如果一致,那么线程就不会再重复获取锁,从而提高了程序的运行效率。
如果出现锁的竞争情况,那么偏向锁会被撤销并升级为轻量级锁。
如果资源竞争非常激烈,会升级为重量级锁。
偏向锁可以降低无竞争开销,它不是互斥锁,不存在线程竞争的情况,
省去了再次同步判断的步骤(获取锁),大大提升了程序运行性能。