下载 http://download.csdn.net/download/crazyzxljing0621/9969870
前言
10.1要去苏州玩。
9月初去携程买票,发现过几天才放票
现在可以预约抢票。
用户流程 : 选票 -> 选预约 -> 选抢票类型极速/快速/免费 -> 支付票价和抢票费用 -> 自动帮抢票
携程这个流程我猜测是(当然我没有做过和12306或什么票务接口对接的工作 )
- 记录用户选票类型和票信息,等放票的时候通过接口调用买票这个接口可能是多次提交或提交一次设定要购买的票信息数组?
- 得到票后将票分配给所有预付款用户,当然按照抢票类型优先分配,按照如果一个人一次买了3张票,优先分配邻座。
- 因为很少买火车票,百度说火车票是分批次放票,比如13点100张票,14点200张票这样。。
- 所以只要还有放票的可能携程还是继续给未得到票的人抢票,即便放票完毕。还有退票不是么
恰逢正在看juc,觉得这个可以做一个小demo来巩固一下
我的demo简单多了
- 设定N个用户
- N个用户全部预约就位
- 系统开始放票M张,总共会放Y张票
- 每放票M张,则用户开始同时去抢票
- 抢不到的等着继续放票
- 放票系统发现M张票强没了,会继续放票
- 用户也继续抢票
- 最后放票完毕,没有余票了。结束程序,记录抢票成功的用户
目录结构
代码
先看看最终结果
总共21张票,25个人同时并发去抢,每次放票5张,每隔几秒再次放票,直到票售罄
买票用户 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25] | 就位
sys : 开始放票
/**
**票仓[[票0, 票1, 票2, 票3, 票4]]
**增加了5张票
**/
用户[25]的抢票结果为 true[票0]
用户[2]的抢票结果为 true[票1]
用户[4]的抢票结果为 true[票2]
用户[6]的抢票结果为 true[票3]
用户[8]的抢票结果为 true[票4]
/**
**票仓[[票5, 票6, 票7, 票8, 票9]]
**增加了5张票
**/
用户[10]的抢票结果为 true[票5]
用户[12]的抢票结果为 true[票6]
用户[14]的抢票结果为 true[票7]
用户[16]的抢票结果为 true[票8]
用户[18]的抢票结果为 true[票9]
/**
**票仓[[票10, 票11, 票12, 票13, 票14]]
**增加了5张票
**/
用户[20]的抢票结果为 true[票10]
用户[22]的抢票结果为 true[票11]
用户[24]的抢票结果为 true[票12]
用户[1]的抢票结果为 true[票13]