《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
C+-C资深大佬20 分钟前
C++类型判断
开发语言·c++
2501_9445215926 分钟前
Flutter for OpenHarmony 微动漫App实战:推荐动漫实现
android·开发语言·前端·javascript·flutter·ecmascript
不绝19131 分钟前
C#进阶:委托
开发语言·c#
喜欢喝果茶.31 分钟前
跨.cs 文件传值(C#)
开发语言·c#
それども32 分钟前
@ConditionalOnWebApplication 作用
java
二哈喇子!32 分钟前
基于SSM框架的公交车查询系统的设计与实现
java·数据库·ssm
zmzb010336 分钟前
C++课后习题训练记录Day74
开发语言·c++
二哈喇子!41 分钟前
基于JavaSE的淘宝卖鞋后端管理系统的设计与实现
java·spring boot·spring
小冷coding43 分钟前
【Java】Dubbo 与 OpenFeign 的核心区别
java·开发语言·dubbo
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-智能考试系统-学习分析模块
java·开发语言·数据库·spring boot·ddd·tdd