BR 技术头条 技术链接、资讯与社区分享流
ji jinyu.host / 2023-04-29 20:47 / by @技术头条

并发编程锁之ReentrantLock总结

在并发编程中一个比较难解决的就是共享资源并发访问控制问题。如果同步做的不好,很容易出现不一致问题,从而导致业务逻辑的错误;但是如果对共享资源控制的过于严格,又很容易对性能造成很大的影响。在并发编程中,一方面多从大牛的源码中学习精巧的思想和结构设计;另一方面要对并发基础知识掌握的足够牢固,你才能游刃有余的结合些设计模式、架构思想做出些高质量的高并发、高性能的系统。并发编程对设计模式、架构设计是非常依赖的,因此,并发编程对经验的积累、知识的积累方面要求是比较高的。

刚才说过,共享资源在并发访问中很容易造成不一致问题,解决方案就是我们所熟知的悲观锁和乐观锁。悲观锁就如其名字一样:悲观锁认为并发访问一定会导致状态不一致问题,所以在并发操作前一定要锁住资源,让并发线程一个接一个串行化去访问。而乐观锁就不一样了,乐观锁认为并发访问在大多数情况下是不会导致状态不一致问题,所以可以放心的去访问,一旦出现问题再说,本质上乐观锁是不会对共享资源添加锁限制的。这是我个人的理解,可能直白不是那么的精准,有关悲观锁、乐观锁的定义可以搜索更准确的官方解释。

我们来看看在Java中是如何实现悲观锁和乐观锁的。悲观锁在Java中就是我们所熟知的锁,实现方式主要分为两种:synchronized和Lock,而乐观锁的实现主要通过CAS操作实现。

发表评论