锁的性能和优化
一、避免死锁
1、出现死锁需要满足以下条件:
互斥条件:一个资源每次只能被一个进程使用。
请求和保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。
循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
只要破坏死锁4个必要条件中的一个,死锁问题就能得以解决。
二、减小锁持有时间
三、减小锁粒度
ConcurrentHashMap
四、读写分离锁来代替独占锁
ReadWriteLock(读写分离锁)
五、锁分离
LinkedBlockingQueue通过takeLock和putLock两把锁,实现了取数据和写数据的分离。
六、重入锁(ReentrantLock)和内部锁(synchronized)
重入锁比内部锁功能更强大,内部锁使用更为简单,易于维护。两者性能相差不大。
七、锁粗化
浙公网安备 33010602011771号