这个简单的代码应该会产生死锁,但事实并非如此

Ric*_*ral 0 java concurrency synchronized

我昨天发布的问题类似,我有这个问题,我无法理解.代码非常简单,应该(我认为)会产生死锁.我甚至将帐号数量减少到2,以增加死锁的可能性.

代码非常容易理解,但是要提供一些上下文.我有一个账户银行,我在账户之间进行大量转账.传输方法应该生成死锁.为什么不发生这种情况?

我只能认为,代码运行太快,但似乎不太可能发生的所有的时间.

这是完整的代码:http: //pastebin.com/HWJpuT38

Sim*_*son 8

问题出在这一行:

mAccounts = new ArrayList<Account>(Collections.nCopies(slots, new Account()));
Run Code Online (Sandbox Code Playgroud)

基本上,只有一个Account对象,但很多引用它.因此,您只能锁定单个对象.

如果您创建了许多不同的Account对象,您应该能够很快地看到死锁.