java 订单号 交易锁_(精)订单加锁及生成订单号
今天看了黎活明老师的 实现订单加锁解锁(也包括生成订单号)功能 的视频,即多人操作(审核等)订单时的如何加锁。对事务并发又温习了一下。涉及的东西无非是操作系统的多线程引起的并发,这里有个概念就是cpu时间片,也就是说在一个cpu时间片上只会有一个指令(一个线程里的)在执行,到下一个时间片就根据线程的调度就会执行其它指令(可能是另一个线程的),对我们来说就是多线程并发。由于时间片很短,所以我们把两个
·
今天看了黎活明老师的 实现订单加锁解锁(也包括生成订单号)功能 的视频,即多人操作(审核等)订单时的如何加锁。
对事务并发又温习了一下。涉及的东西无非是操作系统的多线程引起的并发,这里有个概念就是cpu时间片,也就是说在一个cpu时间片上只会有一个指令(一个线程里的)在执行,到下一个时间片就根据线程的调度就会执行其它指令(可能是另一个线程的),对我们来说就是多线程并发。由于时间片很短,所以我们把两个用户同时操作看成是并发的。
另外多线程并发操作数据库时,就又有一个概念,就是数据库隔离级别。
我们的订单加锁就是在数据库隔离级别上的某个级别上做。隔离级别不同可能做法不同。
oracle数据库默认隔离级别,会对update加更新锁,更新完后会加排他锁,事务提交后才会解除排他锁。
黎活明老师巴巴远动视频里还讲了两种生成订单号的方法,其中一种是可以用在分布式环境部署是生成不唯一订单号的方法,建议看看。
订单号:
主要当t1的事务提交后,t2才能更新。所以t1更新完后,再查询出来的数据一定是他刚更新过得。
当然这要两点保证:
1: update和select在一个事务里。
2:事务的隔离级别,利用数据库事务的锁机制。
更多推荐
已为社区贡献1条内容
所有评论(0)