synchronized锁升级
JDK1.6时synchronized锁有:
偏向锁:在一段时间只有一个线程使用锁,此时就可以使用偏向锁,第一次获取到锁需要CAS操作,之后要再次获取锁,只需要在获取锁时判断当前线程id是否为已经获取锁的线程id,不需要CAS操作,提高了性能。
轻量级锁:多个线程交替持有锁,但是没有发生竞争,此时就是轻量级锁,每次获取锁都是一个CAS操作,保证原子性。
重量级锁:当出现竞争,锁就升级为重量级锁,当线程没有获取到锁会进入阻塞状态,重量级锁涉及到用户态和内核态的切换以及线程上下文切换,所以性能比较低。