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

标签 java concurrency synchronized

类似于问题I posted yesterday ,我有这个问题,我无法理解。代码非常简单,(我认为)应该会产生死锁。我什至将账户数量减少到2个,以增加死锁的可能性。

代码确实很容易理解,但需要提供一些上下文。我有一家有账户的银行,并且我在账户之间进行大量转账。传输方法应该会产生死锁。为什么没有发生这种情况?

我只能认为代码运行得太快了,但这似乎不太可能一直发生

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

最佳答案

问题出在这一行:

mAccounts = new ArrayList<Account>(Collections.nCopies(slots, new Account()));

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

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

关于java - 这个简单的代码应该会产生死锁,但事实并非如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7835420/

相关文章:

Javafx)应用程序正在泄漏内存

java - 通过 ReadableByteChannel 的 InputStream 没有读到结束

java - 选择没有子字符串的行

java - 查询 Google App Engine 数据存储区时出现并发问题

c# - .NET 字典 : Potential concurrency problems?

java - 为什么同步方法允许多个线程并发运行?

java - 使用字符串引用原始文件夹中的文件

java - Vertx运行任务100次并分析结果

Java:提高同步函数的线程速度

java - 创建多线程java类来处理数据