《Java核心技术I》死锁

死锁

  1. 账户1:200元
  2. 账户2: 300元
  3. 线程1:从账号1转300到账户2
  4. 线程2:从账户2转400到账户1

如上,线程1和线程2显然都被阻塞,两个账户的余额都不足以转账,两个线程都无法执行下去。

有可能会因为每一个线程要等待更多的钱款存入而导致所有线程都被阻塞,这样的状态称为死锁(deadlock)。通俗的说两个或多个线程互相持有对方释放锁的必要资源,导致都无法执行。

如果把之前的例子中,每次转账至多1000的限制去掉,很快就会发生死锁,试试看。

提示:当程序挂起时,按下Ctrl+\,将得到一个线程转储,会列出所有线程。可以运行jconsole并参考线程面板。

待续。。。

相关推荐
aXin_ya7 小时前
乐尚代驾,总结
java
catchadmin7 小时前
PHP 在领域驱动(DDD)设计中的核心实践
开发语言·php
仙俊红7 小时前
Java JUC:CompletableFuture 详解,多个任务并行执行并等待全部完成
java·python·spring
JAVA面经实录9177 小时前
MongoDB(文档型 NoSQL)
java·数据库·mongodb·nosql
cfm_29147 小时前
JVM类加载机制初步了解
java·jvm
让我上个超影吧7 小时前
Cluade code:上下文压缩
java·服务器·ai
plainGeekDev7 小时前
批量写入 → Room 事务
android·java·kotlin
宋哥转AI7 小时前
MCP 第一天我没写@Tool,先在一个大仓库里划这三层
java·agent·mcp
填满你的记忆7 小时前
MCP协议是什么?为什么它被称为AI时代的“USB接口”?
java·人工智能·agent·mcp
云烟成雨TD7 小时前
Spring AI Alibaba 1.x 系列【72】集成 MCP 客户端
java·人工智能·spring