《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
Gerardisite7 小时前
CRM、ERP、OA 如何连接企业微信?QiWe 提供标准化解决方案
java·python·机器人·自动化·企业微信
城管不管7 小时前
Maven Helper
java·macos·intellij-idea
ch.ju7 小时前
Java程序设计(第3版)第三章——数组的动态获取
java·开发语言
Java知识技术分享7 小时前
策略模式的两种实现:抽象类和接口
java·spring·策略模式
液态不合群8 小时前
Redis--哨兵机制与CAP定理
java·redis·bootstrap
曹牧8 小时前
Java:PDF文件扁平化处理
java·开发语言·pdf
灰色人生qwer8 小时前
解决IDEA运行Java程序jdk版本不匹配问题
java·开发语言·intellij-idea
小侯不躺平.8 小时前
C++ Boost库【3】 --类型推导
开发语言·c++
枫叶丹48 小时前
【HarmonyOS 6.0】状态栏扩展新特性:点击状态栏图标展开二级菜单的场景动效详解
开发语言·华为·harmonyos
yaoxin5211238 小时前
405. Java 文件操作基础 - 装饰者模式与 I/O Streams
java·开发语言·python