4.1 锁的优化及注意事项

一:减少锁的持有时间:

   例如:   

public synchronized void  all(){
aaa();
bbb();
ccc();
}
如果就bbb方法存在并发情况,需要加锁,那么我们只需要 给bbb方法添加同步方法即可:

public  void  all(){
aaa();
synchronized (this){
bbb();
}
ccc();
}

二:减小锁的粒度:

   最熟悉的就是 ConcurrentHashMap,本质是分段,当put的时候,那么它会tryLock,锁定它所处的段内,对其他段数据读取不进行阻塞

三:使用读写分离锁来代替独占锁

四:锁分离

  最熟悉的就是LinkedBlockingQueue,当用put和take的时候,如果队列已满或者是null的时候它只是阻塞取出或者插入,并没有锁定整个队列

五:锁的粗化

  如果一个方法里存在多个需要同步的方法,那么为了方便管理,我们可以将这个方法射程同步方法



 

       

原文地址:https://www.cnblogs.com/anxbb/p/8487762.html