《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
CCPC不拿奖不改名几秒前
面向对象编程:继承与多态+面试习题
开发语言·数据结构·python·学习·面试·职场和发展
꧁Q༒ོγ꧂2 分钟前
算法详解(二)--算法思想基础
java·数据结构·算法
꧁Q༒ོγ꧂3 分钟前
算法详解(一)--算法系列开篇:什么是算法?
开发语言·c++·算法
次元工程师!4 分钟前
Sa-Token完成路由鉴权
java·服务器·前端
华如锦10 分钟前
一.2部署——大模型服务快速部署vLLM GPU 安装教程 (Linux)
java·linux·运维·人工智能·后端·python·vllm
星火开发设计13 分钟前
Python数元组完全指南:从基础到实战
开发语言·windows·python·学习·知识·tuple
wuk99814 分钟前
栅格障碍物地图生成与机器人路径规划MATLAB程序
开发语言·matlab
郝学胜-神的一滴15 分钟前
深入浅出:Python类变量与实例变量的核心差异与应用实践
开发语言·python·程序人生
小鸡脚来咯15 分钟前
设计模式,单例和工厂模式
java
froginwe1117 分钟前
C 未定义行为
开发语言