-2
我遇到的情况,在我要执行从账户A转账到B 为此我用synchronized块一样的东西:的Java多线程 - 银行申请
public void transaction(Account A , Account B , Number Amount){
Synchronized(this){
A - amount;
B + amount;
commit;
}
}
这种做法是罚款交易在A到B之间,但问题是:它也阻止所有其他交易。 即当事务A→B正在进行时,同时C→D之间的事务也将被阻止。 A-> B之间的理想交易不应该影响交易C-> D。
这个场景如何在Java中处理? 在此先感谢您的回复。
你为什么要张贴这样的格式化不好的代码?请不要让它更难理解你的代码。编辑并修复。 –
https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html - 这是你应该开始的地方。 –
@HovercraftFullOfEels不会简单地使用Account作为监视器,这可能导致死锁。当A将资金转移到B并且B将资金同时转移给A时:线程1锁定A,线程2锁定B,线程1尝试锁定B但线程2已锁定线程2,线程2尝试锁定A但线程1已经锁定它 - >死锁。你可以这样做,如果你总是锁定帐户与低ID第一 –