《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
不染尘.几秒前
背包问题BP
开发语言·c++·算法
程序员buddha1 分钟前
Java面试八股文基础篇
java·开发语言·面试
2401_874732532 分钟前
基于C++的爬虫框架
开发语言·c++·算法
凌冰_3 分钟前
Servlet 过滤器(Filter)
java·servlet
3GPP仿真实验室4 分钟前
【MATLAB源码】THz ISAC:太赫兹通感一体化链路级仿真平台
开发语言·matlab
lly2024065 分钟前
HTML5 测验
开发语言
吴声子夜歌5 分钟前
JavaScript——字符串和正则表达式
开发语言·javascript·正则表达式
林恒smileZAZ5 分钟前
JavaScript this绑定规则:告别踩坑指南!
开发语言·javascript·ecmascript
2401_873204659 分钟前
C++代码重构实战
开发语言·c++·算法
crossoverJie9 分钟前
OpenAI 收购 Python 工具链 uv 和 Ruff
开发语言·人工智能·python·uv