《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
techdashen20 小时前
Rust项目公开征测:Cargo 构建目录新布局方案
开发语言·后端·rust
一 乐20 小时前
电影院|基于springboot + vue电影院购票管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·电影院购票管理管理系统
星空椰20 小时前
JavaScript 进阶基础:函数、作用域与常用技巧总结
开发语言·前端·javascript
恼书:-(空寄20 小时前
JVM GC 日志分析 + 常见 GC 场景 + 实战参数调优
java·jvm
消失的旧时光-194320 小时前
Spring Boot 实战(五):接口工程化升级(统一返回 + 异常处理 + 错误码体系 + 异常流转机制)
java·spring boot·后端·解耦
忒可君20 小时前
C# winform 自制分页功能
android·开发语言·c#
Rust研习社20 小时前
Rust 智能指针 Cell 与 RefCell 的内部可变性
开发语言·后端·rust
leaves falling21 小时前
C++模板进阶
开发语言·c++
坐吃山猪21 小时前
Python27_协程游戏理解
开发语言·python·游戏
gCode Teacher 格码致知21 小时前
Javascript提高:小数精度和随机数-由Deepseek产生
开发语言·javascript·ecmascript