前言
上文的产品设计流程:查看图书列表 7.3 实现-》查看图书详情上文7.20 -》图书借阅(本文)。
就好比:一帮人 抢借一本书,这和秒杀1本书 如出一辙,大家都懂 这就存在 并发问题!
本文会先写【业务实现】,再来谈【如何解决】并发问题!重点在第三段的并发实战:代码演示使用 synchronized、ReentrantLock、AtomicBoolean、细粒度Key锁、数据库乐观锁,以版本迭代的方式,逐个分析遇到的问题,以及解决的方案,助你理解这种场景的最佳实践!
一、编写服务层
代码语言:javascript复制
BookBorrowService
新增borrowBook
方法定义(其它方法省略):
public interface BookBorrowService {
/**
* 图书借阅: 哪个学生(userid)借了哪本书(bookId)
**/
void borrowBook(Integer bookId, Integer userId);
}
BookBorrowServiceImpl
增加实现方法borrowBook