《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
鬼手点金2 分钟前
单轮对话:最简单的 API 调用
java·服务器·前端·javascript·react.js·servlet·tomcat
传奇开心果编程8 分钟前
【Rust入门练中学】第9课:集合类型
开发语言·rust·编程语言理论·集合类型·通用编程语言
龙孚信息16 分钟前
跨境电商独立站的安全盲区:一次 PHP 核心漏洞的影响评估
开发语言·安全·php
牛牛牌蜡笔小新22 分钟前
Java-常用类库
java·开发语言
Wang's Blog25 分钟前
Java 项目实战: 交友项目 - MongoDB集群:概述
java·mongodb·交友
sunsijia2198332 分钟前
2026年10月22日 PHP漏洞临时处理
开发语言·php
wangchunyu11434 分钟前
JAVA ThreadLocal、伪共享与Disruptor
java
慧都小项39 分钟前
图解 MyEclipse Deployment Assembly:资源如何进入部署产物?
java·ide·tomcat·maven·myeclipse·部署排查
Wang's Blog42 分钟前
Java 项目实战: 交友项目 - MongoDB基础总结与自检清单
java·mongodb·交友
Aurorar0rua42 分钟前
CS50 x 2024 Notes Python - 02
开发语言·python·学习方法