高并发如何保证线程执行的先后顺序

log4j日志时间点                                    线程号                              操作数据库动作

2017-10-21 12:32:52,804  http-bio-8080-exec-150  select TOTAL_DAY_LIMIT null then insert 0 commit;

2017-10-21 12:32:52,842  http-bio-8080-exec-152  select TOTAL_DAY_LIMIT 0

2017-10-21 12:32:53,224  http-bio-8080-exec-150  update TOTAL_DAY_LIMIT+1--->TOTAL_DAY_LIMIT='1' commit;

2017-10-21 12:32:53,325 http-bio-8080-exec-153  select TOTAL_DAY_LIMIT 1

2017-10-21 12:32:53,475 http-bio-8080-exec-152  update TOTAL_DAY_LIMIT+1--->TOTAL_DAY_LIMIT='2' commit;

2017-10-21 12:32:53,564  http-bio-8080-exec-154select TOTAL_DAY_LIMIT 2 限额超限,拒绝交易

2017-10-21 12:32:53,718  http-bio-8080-exec-153  update TOTAL_DAY_LIMIT+1--->TOTAL_DAY_LIMIT='3' commit;

正常交易流程:客户单卡单日累计限额为2元(TOTAL_DAY_LIMIT),并发4笔交易,每笔交易1元,当客户消费第3笔时,限额超限,拒绝交易,

数据库应该记录限额为2元(TOTAL_DAY_LIMIT)

实际交易流程:客户单卡单日累计限额为2元(TOTAL_DAY_LIMIT),并发4笔交易,每笔交易1元,当客户消费第4笔时,限额超限,拒绝交易,

数据库应该记录限额为3元(TOTAL_DAY_LIMIT),原因如上。

有没有好的解决方案呢,按照正常的交易流程。

猜你喜欢

转载自leijian0128.iteye.com/blog/2397154