确认一键查看最优答案
本功能為VIP专享,开通VIP获取答案速率将提升10倍哦!
我实现了一个在线票务系统服务类似去哪儿网。其中一个方法是售票(newOrder方法)之前问:每个HTTP請求都相当于一个线程,
那这个方法需要加锁同步吗加锁的颗粒度又是多大?
是在方法中加synchronized还是可以使用同步代码块请大神帮忙解答,谢谢、
//获得符合条件的票集合
//选择数量->订票->跳转信息填写页面(评审是否需要)->订票成功 (数据库事务)
不推荐把锁加在controller里也不推荐茬方法上加入同步,考虑在service中控制订票返回成功或失败。
锁可以加载数据库层比如select for update或者用版本号,最后更新时间来控制同时更新的情況
数据库dao层我用的是mybatis都是接口 好像不太方便加锁还有个问题就是在数据库中采用版本号是指数据库鎖吗?使用数据库锁了还需要在方法中加锁吗
问题3,在一个地方加锁控制住就可以了
synchronized是在程序服务器控制,数据库锁是在数据库服务器来控制
简单来说是在两个服务器上,如果数据库那边通过锁本身保证了数据的一致性的话程序则不需要加锁。
不是冗余看你的需要。
这个最好在数据库层面考虑加锁,锁就只有乐观锁/悲观锁,优缺点自己看
乐观锁并非数据库的鎖,而是一种编程范式