《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
Penina10188 分钟前
代码如何导入idea
java·intellij idea
.Hypocritical.14 分钟前
Maven笔记——2
java·笔记·maven
huohuopro24 分钟前
手写 Tomcat 步骤教程
java·网络
snow@li27 分钟前
Java:Lombok 完整讲解
java
Shadow(⊙o⊙)28 分钟前
高并发内存池:Part-1——定长内存池
java·前端·javascript
国服第二切图仔37 分钟前
17-config命令 - 配置管理系统
java·前端·javascript
人间凡尔赛9 小时前
Next.js 16 生产级实战:Cache Components + View Transitions 完整指南
开发语言·javascript·ecmascript
架构源启10 小时前
文档接入与智能解析:基于 Spring AI 1.1.x 的多格式解析、版面理解与结构化抽取
java·人工智能·spring
稚南城才子,乌衣巷风流13 小时前
函数:编程中的核心概念
开发语言·前端·javascript
阿米亚波13 小时前
【C++】流式数据输入处理(不完全整理)
开发语言·c++·笔记