乐观和悲观锁在编程当中可是一个非常基础的概念,本文将对这两种常见的做一个具体的介绍。
悲观锁的特征是先获取所在进行业务方面的操作,通俗的说就是获取所示非常有可能会失败的,因此要确保获取锁成功之后才能够进行业务方面的操作,用专业的术语来说,就是一锁二查三更新了。
乐观锁的特点是先进行业务操作,不到特殊的情况下是不会去拿的。也就是乐观的认为拿锁则意味着快要成功,因此在进行完业务操作需要实际更新数据的最后一步才去拿,而乐观锁在数据库上,实现完全是有逻辑性的,不仅不需要任何的技术,也不需要提供其它特殊的服务。
总的来说,乐观锁在不发生取所失败的情况下,开销是比较小的,但是一旦失败的话开销就比较的大了,因此适合在取锁成功概率较大的情况下。而且前者还适用于一些比较不常见的场景,比如说在业务操作过程当中,没有办法和数据库保持连接,这都是后者没有办法适用的地方。