1.什么是锁粗化
锁粗化一般指有效地合并几个相邻的锁定块,从而减少锁定开销。如下述代码所示:
锁粗化前代码:
synchronized (obj) {
// statements 1
}
synchronized (obj) {
// statements 2
}
锁粗化后代码:
synchronized (obj) {
// statements 1
// statements 2
}
2.循环场景下的锁粗化
循环场景下的锁粗化一般指合并几个循环体内的锁定块,如下述代码所示:
锁粗化前:
for (...) {
synchronized (obj) {
// something
}
}
锁粗化后:
synchronized (this) {
for (...) {
// something
}
}
3.锁粗化可能带来的问题
使锁变得过于粗化,以至于特定线程在执行循环时会独占锁,从而导致大量线程阻塞。