该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点
面试官:乐观锁和悲观锁的理解及如何实现,有哪些实现方式
悲观锁(Pessimistic Locking)
悲观锁的思想是“总是假设最坏的情况会发生”,悲观锁的核心理念是假设数据库中的资源很可能会发生冲突,因此在访问资源之前会先对其进行加锁,确保在当前事务中对资源的独占访问。悲观锁通常在读取数据时也会进行加锁,以防止其他事务在此期间对数据进行修改。
实现方式:
- 数据库事务隔离级别: 通过设置数据库的事务隔离级别可以实现悲观锁。例如,SQL标准的
SERIALIZABLE
隔离级别可以避免脏读、不可重复读和幻读,确保事务的串行执行。 - 数据库锁机制: 许多数据库系统提供了行级锁、表级锁等机制。例如,在MySQL中,可以使用
SELECT ... FOR UPDATE
语句来对读取的记录加排它锁(Exclusive Lock),防止其他事务修改这些记录。 - 应用程序锁: 有时候,悲观锁也可以通过应用程序逻辑来实现,比如在应用层面上通过同步机制来控制对共享资源的访问。
举例说明:
假设有一个银行转账的场景,用户A向用户B转账100元。在悲观锁的