JAVA:有关不同步的线程安全项目的咨询

时间:2018-11-29 11:35:33

标签: java multithreading thread-safety

我有一个学校项目:创建一个书店。 我将尝试带出所有有关我的问题的信息。

1)商店有一个库存类,其中包含书籍(书籍本身就是书籍),每本书都包含书籍的可用数量及其价格(该数量将为AtomicInteger,以确保线程安全减少)

2)每个客户的信用卡中都有金额(该金额将是AtomicInteger,以确保线程安全减少)。

3)商店需要处理客户的订单:

a。检查客户的购买能力和购买书的能力。

b。从库存中取出书(将数量减少一)。

c。从客户的信用卡中收取款项。

4)商店具有可以处理客户订单的线程数。

现在我的问题是: 我有一个需要领事馆的特殊情况。步骤如下: 假设我有客户A和客户B。都为同一本书订购了一个书,而该书只有一个副本。他们的订单由两个线程同时处理:客户A的线程1和客户B的线程2。都检查阶段3)a。两者都很好。假设在阶段3)b中胎面1更快。并且它正在线程2之前执行。现在线程2正在执行阶段3)b。失败了现在回到线程1,它正在尝试进入阶段3)c。并失败(例如,假设有一个线程3为客户A订了另一本书的订单,现在该客户的信用卡余额已更改,并且他没有钱来完成线程1处理的订单) 。结果是两个客户都没有提交任何订单。

我认为最简单的解决方案是进行阶段3)b。和3)c。在同步对象清单时,但这意味着我需要锁定清单,这是我通常不希望的。 更为方便的是同步到书本而不是所有书本(是吗?)。

仍然,我正在寻找完全不涉及同步的解决方案。你有什么想法吗?

0 个答案:

没有答案