《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
starzy19904 分钟前
Flink ResourceManager启动流程源码深度剖析:从ClusterEntrypoint到Slot分配的完整链路
java·大数据·flink
悠仁さん5 分钟前
【C++】auto
java·前端·c++
郝学胜-神的一滴10 分钟前
C++ Templates 07:编译报错和调试手段与实战技巧
开发语言·c++·后端·软件工程·visual studio
害人终害己18 分钟前
Redisson 连接 Redis 失败 报错解决方案
java·开发语言
学编程就要猛26 分钟前
Spring AI Alibaba(上)
java·人工智能·spring·springaialibaba
jimy128 分钟前
c++的静态类型和动态类型(二)
开发语言·c++
吠品28 分钟前
箭头函数为什么不能 new
开发语言·javascript·原型模式
谢亮_vipxieliang37 分钟前
PHP 8 新特性:构造器属性提升与实战
开发语言·后端·php
imDwAaY39 分钟前
Spring Boot的核心配置文件一览及其加载顺序
java·spring boot·后端
zhangx1234_42 分钟前
javaEE 多线程1
java·linux·服务器