我想知道我该怎样做才能确保我的代码在线程安全的同时“租用”#34;一本书。
def rentBook(intNum: Int): Future[Unit] = Future[Unit] {
val book = Await.result(bookRep.getById(intNum), 5 seconds).get
if(book.available) {
val updatedBook = Book(intNum, book.title, book.authID, available = false)
bookRep.updateById(intNum, updatedBook)
}
}
基本上我在这里找到我要租的书,检查它是否可用,然后更新它以使其无法使用。但是在这里我们有明显的错误,这将允许两个用户在一定条件下租用同一本书(他们搜索书籍,同时获得书籍,并且他们两本书都可用)。这是服务类。如何使用Slick Scala使此事务成为原子?我正在连接H2数据库。
我尝试使用synchronized块,但我想知道是否有更好的方法?