Java入门十四

如何减少锁的竞争

1、减少锁的粒度
使用锁的时候,锁所保护的对象是多个,当这些多个对象其实是独立变化的时候,不如用多个锁来一一保护这些对象。但是如果有同时要持有多个锁的业务方法,要注意避免发生死锁。
2、缩小锁的范围
对锁的持有实现快进快出,尽量缩短持由锁的的时间。将一些与锁无关的代码移出锁的范围,特别是一些耗时,可能阻塞的操作。
3、避免多余的锁
两次加锁之间的语句非常简单,导致加锁的时间比执行这些语句还长,这个时候应该进行锁粗化—扩大锁的范围。
4、锁分段
ConcurrrentHashMap就是典型的锁分段。
5、替换独占锁
在业务允许的情况下:1、使用读写锁,2、用自旋CAS 3、使用系统的并发容器

你可能感兴趣的:(Java入门十四)