一:减少锁的持有时间:
例如:
public synchronized void all(){
aaa();
bbb();
ccc();
}
如果就bbb方法存在并发情况,需要加锁,那么我们只需要 给bbb方法添加同步方法即可:
public void all(){
aaa();
synchronized (this){
bbb();
}
ccc();
}
二:减小锁的粒度:
最熟悉的就是 ConcurrentHashMap,本质是分段,当put的时候,那么它会tryLock,锁定它所处的段内,对其他段数据读取不进行阻塞
三:使用读写分离锁来代替独占锁
四:锁分离
最熟悉的就是LinkedBlockingQueue,当用put和take的时候,如果队列已满或者是null的时候它只是阻塞取出或者插入,并没有锁定整个队列
五:锁的粗化
如果一个方法里存在多个需要同步的方法,那么为了方便管理,我们可以将这个方法射程同步方法