乐观锁(Optimistic Locking) 和 悲观锁(Pessimistic Locking)
是并发编程中的两种锁策略,用于处理多个线程对共享资源的访问和更新。
乐观锁(Optimistic Locking)
乐观锁是一种认为资源不会被并发修改的锁策略,在每次操作时不直接加锁,而是先假设数据不会被并发修改。
只有在提交更新时,才会检查在操作期间资源是否被其他线程修改过。如果资源被修改,操作失败并重试。
乐观锁适用于并发冲突较少的场景,因为乐观锁可以减少锁争用,提升性能。
乐观锁的缺点是,在高并发环境中,冲突可能频繁发生,导致大量的重试,反而可能影响系统性能
——————————————————————————————————————————————
悲观锁(Pessimistic Locking)
悲观锁是一种认为资源会被并发修改的锁策略,每次访问资源时都会加锁,保证只有一个线程能够访问资源,其他线程必须等待锁的释放。这种锁策略在整个资源访问和更新的过程中都持有锁。
悲观锁适用于并发冲突较多的场景,因为在这些场景下,频繁的锁争用可以有效地防止数据不一致。
悲观锁的缺点是通过加锁确保数据一致性,其他线程可能会长时间等待,可能影响性能
[Java的synchronized就是一种悲观锁]
——————————————————————————————————————————————
在选择使用哪种锁时,需要根据系统的具体并发情况和业务需求进行权衡