《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
captain37639 分钟前
文件与IO(2)
java·开发语言·windows·java-ee
mqiqe1 小时前
AgentScope Java 2.0 集成 Chat Completions Web:一行依赖让你的 Agent 变身 OpenAI 兼容服务
java·开发语言·前端
qq_589666051 小时前
Java微服务介绍及应用
java·开发语言·微服务
OPEN-F1 小时前
C++进阶教程:运算符重载与类型转换
java·c++·算法
小小数媒成员1 小时前
存储器层级结构
java·服务器·前端
uoKent1 小时前
c++中的extern关键字
开发语言·c++
牧杉-惊蛰1 小时前
将数组对象根据自定义排列
java·开发语言·算法
砚底藏山河2 小时前
【量化纯GET实战 #04】批量快照:一次 HTTP GET 取多只股票
java·python·金融·eclipse
君顾12 小时前
家校托管互通:从需求分析到系统架构的落地实践
java·开发语言·托管
QQ_21696290962 小时前
【源码编号:project93375】SpringBoot汽车维修管理信息系统:客户车辆、维修预约、工单派发、配件结算全流程实战
java·spring boot·后端·汽车·springboot·需求分析