《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
lang201509283 分钟前
Java JSR 250核心注解全解析
java·开发语言
Wpa.wk6 分钟前
接口自动化测试 - 请求构造和响应断言 -Rest-assure
开发语言·python·测试工具·接口自动化
czhc114007566314 分钟前
协议 25
java·开发语言·算法
逆光的July15 分钟前
如何解决超卖问题
java
ae_zr19 分钟前
QT动态编译应用后,如何快速获取依赖
开发语言·qt
落花流水 丶20 分钟前
Java 集合框架完全指南
java
gjxDaniel22 分钟前
Kotlin编程语言入门与常见问题
android·开发语言·kotlin
lang2015092840 分钟前
Java WebSocket API:JSR-356详解
java·python·websocket
jiang_changsheng43 分钟前
环境管理工具全景图与深度对比
java·c语言·开发语言·c++·python·r语言
计算机学姐1 小时前
基于SpringBoot的民宿预定管理系统【三角色+个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·mysql·信息可视化·intellij-idea·推荐算法