这两个概念是非常宏观的,只是两种不同的设计思想。
一、基本概念
悲观锁:假设线程在竞争资源时肯定会发生冲突,这时就需要把这个资源锁住,只有一个线程能同时操作这些竞争资源,其他线程只能等待拥有这个锁的线程完成操作。
乐观锁:顾名思义就是假设线程在竞争资源不会发生冲突,或者说概率很小,大家都可以同时访问这个资源,只有在最终修改的那一瞬间才会去检查是否能够修改。但如果发现冲突了怎么办?回滚。
这样很明显,乐观锁加锁的时间短,在多读少写,并发的可能性较低的情况下,可以减少事务之间的锁等待和事务对锁的管理开销,能够在一定程度上提高效率。但如果在资源竞争很激烈的情况下,乐观锁就会因为频繁的回滚导致性能的下降。
乐观锁的最初概念其实是Optimistic concurrency control,最初由华人科学家H. T. Kung在1981年提出,wikipedia给出的定义非常准确:
Optimistic concurrency control (OCC) is a concurrency control method applied to transactional systems such as rela[……]