目录
前言
锁的再设计和锁优化
一、分段锁
分段锁的目的就是将锁的粒度进一步细化,当不需要操作整个数组时,就仅仅对数组的某一个部分进行操作即可,例如:ConcurrentHashMap 1.7底层使用的分段锁。
二、锁粗化和锁消除
1.锁粗化
锁粗化是将锁的范围扩大,或将多次上锁合并为一次上锁。
代码如下(示例):
private static final Object lock = new Object();
for (int i = 0; i < 10; i++) {
synchronized (lock){
//同步代码块
}
}
优化成:
private static final Object lock = new Object();
synchronized (lock){
for (int i = 0; i < 10; i++) {
}
}
2.锁消除
锁消除是在程序运行时,系统没有检测到线程竞争锁,这时没有线程完全问题,无需上锁。
代码如下(示例):
void test(String s1,String s2) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(s1).append(s2);
stringBuilder.toString();
}
这段代码不存在线程安全问题,为了提升效率,虚拟机会为我们消除这个同步锁。