这是情况,我有3个实例,一个是经理,分配工作,两个是工人,做工作。假设用户需要撤回一些内容,工作流程如下:
Request sent
Manager assign job, depends on worker instance loading
worker do the work (reduce the num in db)
tell the manager instance job is finished!
所有事情都有效,但是两个实例可能有两个在同一个帐户中退出,可能有一些问题,要做一个负数....所以,它有一些问题。好吧,你可以说添加一个执行通道或队列或只执行一个数据库的写函数....
但问题是,当我有越来越多的实例,只有一个实例用于编写时,可能会降低生产力,任何建议?感谢。
答案 0 :(得分:0)
我建议你阅读有关synchronized块/方法或ReentrantLock的信息。基本上你需要在你的withdraw函数上放置读/写锁,以确保两个线程不能同时读/写同一条数据。
答案 1 :(得分:0)
你是怎么做到的?
通过仔细地将操作设计为原子操作,并作为原子操作的一部分进行所有相关的检查,访问和更新。
现在你提到你有一个数据库作为实现技术的一部分。假设它是一个事务数据库,您应该将每个这些原子操作映射到一个事务。所以,建立你的描述:
withdrawal > 0
。balance - withdrawal >= 0
另一方面,如果没有涉及数据库,并且您只是更新内存中的对象,那么您将创建一个Account
类,该类具有执行撤消的同步方法,执行步骤3.3通过上述3.5,让工人用相关参数调用方法。