(1)synchronized-轻量级锁-无竞争
(2)synchronized-轻量级锁-锁膨胀
重量级锁就是我们前面介绍过的Monitor enter
(3)synchronized-重量级锁-自旋
(4)synchronized-偏向锁
轻量级锁会有锁重入的情况,当调用完method1后在 调用method2它会,在一次CAS修改mark为线程1锁记录地址,自己跟自己还要执行这个就没有必要了
进一步优化,利用偏向锁
单个线程偏向锁工作挺好,但是另外有线程进行竞争了,偏向锁就会被撤销,撤销之后会升级为轻量级锁
(5)synchronized-其他优化
ConcurrentHashMap数组的链表头上加锁,锁住的是链表头,原来是HashTable锁住的是整个HashTable,读写操作完全忽视了,锁住链表头加锁的粒度就变小了,每次锁住一个链表,其他链表的读写操作不会受到影响
读的读原始数据内容,写的话复制一份在一个新数组上进行写,读操作不需要操作的,只要同步写