《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
Aurorar0rua10 分钟前
CS50 x 2024 Notes C - 05
java·c语言·数据结构
Cosmoshhhyyy1 小时前
《Effective Java》解读第49条:检查参数的有效性
java·开发语言
棋子入局1 小时前
C语言制作消消乐游戏(2)
c语言·开发语言·游戏
布谷歌1 小时前
常见的OOM错误 ( OutOfMemoryError全类型详解)
java·开发语言
WangJunXiang61 小时前
GFS分布式文件系统
开发语言·php
民乐团扒谱机1 小时前
【微实验】基于matlab的音频提取与信号滤波处理
开发语言·matlab·音视频
eLIN TECE1 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
SomeB1oody1 小时前
【Python深度学习】3.4. 循环神经网络(RNN)实战:预测股价
开发语言·人工智能·python·rnn·深度学习·机器学习
良木生香2 小时前
【C++初阶】:STL——String从入门到应用完全指南(1)
c语言·开发语言·数据结构·c++·算法
老神在在0012 小时前
Spring Bean 的六种作用域详解
java·后端·spring