jdk1.6对synchronized做了优化,分别如下三点:
1 锁消除
如果synchronized的内容不可能引起同步问题,则编译时忽略synchronized,变成没有锁的代码
2 锁膨胀
假如在for循环内设置synchronized代码块,每次循环都会导致加锁和解锁,这会极大的浪费性能,因此jdk1.6以及后面的版本,会将synchronized代码块的范围膨胀到for循环外
3 锁升级
先是偏向锁,竞争激烈时转成轻量级锁,如果多次自旋失败,则升级成重量级锁
jdk1.6对synchronized做了优化,分别如下三点:
1 锁消除
如果synchronized的内容不可能引起同步问题,则编译时忽略synchronized,变成没有锁的代码
2 锁膨胀
假如在for循环内设置synchronized代码块,每次循环都会导致加锁和解锁,这会极大的浪费性能,因此jdk1.6以及后面的版本,会将synchronized代码块的范围膨胀到for循环外
3 锁升级
先是偏向锁,竞争激烈时转成轻量级锁,如果多次自旋失败,则升级成重量级锁