详细解决方案
分布式并发有关问题
热度:2135 发布时间:2013-02-25 21:12:03.0
如图所示:
例如某公司共生产了100台电脑,找了三个一级代理商(A1、A2、A3)帮其销售,而A1、A2、A3又分别找其自己的二级代理商帮其销售(B1、B2、B3、B4、B5),
B1、B2、B3、B4、B5又找其三级代理商帮其销售(C1、C2、C3、C4),D1、D2……代表消费者,ABCD之间的关系由图中箭头所示。
每个代理商可以销售的最大值分别是图例中所标示的值,但每个代理商销售的总和不能超过其上级所表示的值(即:A1的实际销售量+A2的实际销售量+A3的实际销售量<=100,B1的实际销售量+B2的实际销售量<=A1(80))
,其余级别同理,但每个代理商的最大销售量可以修改(增加或减小)
场景一:
D1购买20台电脑,则C1剩余20,B1剩余40,A1剩余60,厂家剩余80,此时A2直接向厂家订购90台,则会提醒货源不足,同理此时如果D2购买30台,因为C1最多还会卖20台,所以也会提示D3货源不足。
场景二:
B2直接从A1购买60台,则A1最多在再卖20台,经销商剩余40台,此时若D1购买30台,则会提示货源不足(因为A1最多只能在卖20台),同理B3购买50台也会提示货源不足(因为经销商还剩下40台)
场景三:
D1,D2,D3购买电脑的同时,减少A1的最大销售量,降为70,此时程序该如何控制,如何保证同步
现在伪码如下
- Java code
//购买电脑public void buyComputer(User buyer){ int buyCount = buyer.getBuyCount();//用户要购买的电脑台数 boolean flag = isCouldBuy();//递归判断上级剩余量是否还够可以购买的方法 if(flag){//表示可以购买 lock.lock(); 购买电脑,递归修改其上级的最大购买量 更新数据到数据库 lock.unlock(); }else{ 提示货源不足 } }//修改最大值public void updateMax(User user , int max){ user.setMax(max); updateUser();//更新数据库}
---------------------------------------------------------------------------------
问题一:如上述三个场景:在分布式环境下如何处理?
问题二:多人同时购买(如D1,D2,D3),是不是要互斥的执行?有没有其它更优方法?
问题三:如果是多线程,spring事务该如何控制?
欢迎探讨 谢谢!
------解决方案--------------------------------------------------------
额!这么多?没怎么理解!顶下吧!
相关解决方案
- 很急 有关<form:select 相关的diable有关问题
- Spring 里面的 AspectJ 有关
- Java 并发 写文件解决思路
- 有关 Mybatis 和 SpringJdbc 一些的有关问题
- struts中action类如何避免多线程(用户)并发
- 有关 java中 线程的有关问题
- 有关 jsp model2 的执行 sql 语句有关问题
- Java 有关 图片下传有关问题
- java分页 有关 html控件 都有什么可以用啊小弟我是菜鸟 求帮助
- Eclipse 有关
- ORA-01017: invalid username/password; logon denied 问题
- JFrame的子类调用repaint方法 问题
- 并发, 线程, CPU解决办法
- oracle 并发 大量数据(成千上万 )需要修改时候怎么办
- oracle 并发 大量数据(成千下万 )需要修改时候怎么办
- 有关 DataInputStream 和 DataOutputStream 的 有关问题 ,报出 EOFException 错误
- SqlServer05 有关
- opefeint 有关
- sqlserver 生成延续单号 并发
- 有关 not in 的有关问题
- 问题 ????????????
- 有关 CSR 的bc417中的SPP的数据流控有关问题
- WinCE6 数据读入写出异常,怀疑和文件类型(ASCII Unicode)有关
- PHP CURL 同步/异步 并发 采摘 爬行
- php fsockopen 并发,该怎么解决
- php fsockopen 并发,该如何处理
- Android Layout 有关
- 有关.net网站挂在 IIS上的有关问题
- C#问题
- mysql 线程有关问题(并发),请问大侠们,顶者有分