Java并发-显式锁篇【可重入锁+读写锁】 (3)

我们用表格来展示吧,细节如下:

锁的特点 内置锁 可重入锁 读写锁
灵活性        
公平性   不确定   非公平(默认)+公平   非公平(默认)+公平  
定时性     可定时   可定时  
中断性     可中断   可中断  
互斥性   互斥   互斥   读读共享,其他都互斥  

建议优先选择内置锁,只有在内置锁满足不了需求时,再采用显式锁(比如可定时、可中断、公平性)

如果是读多写少的场景(比如配置数据),推荐用读写锁

总结

可重入锁 ReentrantLock:需显式获取锁和释放锁,切记要在finally块中释放锁

读写锁 ReadWriteLock:基于显式锁(显式锁有的它都有),多了读写分离,实现了读读共享(多个线程同时读),其他都不共享(读写,写写)

区别:内置锁不支持手动获取/释放锁、公平性选择、定时、中断,显式锁支持

建议使用锁时,优先考虑内置锁

因为现在内置锁的性能跟显式锁差别不大

而且显式锁因为需要手动释放锁(需在finally块中释放),所以会有忘记释放的风险

如果是读多写少的场合,则推荐用读写锁(成对的读锁和写锁需从同一个读写锁类获取)

参考内容:

《Java并发编程实战》

《实战Java高并发》

后记

最后,祝愿所有人都心想事成,阖家欢乐

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygjzy.html