issues
search
Alice52
/
java-ocean
java-tutorial .We intend to explain Java knowledge in this repository.
MIT License
0
stars
0
forks
source link
[lock] common lock
#125
Open
Alice52
opened
4 years ago
Alice52
commented
4 years ago
锁的用法一般是这样的
只有在并发环境中,共享资源不支持并发访问,或者说并发访问共享资源会导致系统错误的情况下,才需要使用锁。
如果能不用锁,就不用锁;如果你不确定是不是应该用锁,那也不要用锁
在访问共享资源之前,先获取锁。
如果获取锁成功,就可以访问共享资源了。
最后,需要释放锁,以便其他线程继续访问共享资源。
关于避免死锁,我在这里给你几点建议
尽量使用可重入锁
再次强调一下,避免滥用锁,程序里用的锁少,写出死锁 Bug 的几率自然就低。
对于同一把锁,加锁和解锁必须要放在同一个方法中,这样一次加锁对应一次解锁,代码清晰简单,便于分析问题。
尽量避免在持有一把锁的情况下,去获取另外一把锁,就是要尽量避免同时持有多把锁。
如果需要持有多把锁,一定要注意加解锁的顺序,解锁的顺序要和加锁顺序相反。比如,获取三把锁的顺序是 A、B、C,释放锁的顺序必须是 C、B、A。
给你程序中所有的锁排一个顺序,在所有需要加锁的地方,按照同样的顺序加解锁。比如我刚刚举的那个例子,如果两个线程都按照先获取 lockA 再获取 lockB 的顺序加锁,就不会产生死锁。
common
使用读写锁就兼顾了性能和安全
读访问可以并发执行。
写的同时不能并发读,也不能并发写。
锁的用法一般是这样的
关于避免死锁,我在这里给你几点建议
common