《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
空山新雨(大队长)11 分钟前
Java第五课:输入输出
java·开发语言
白云如幻15 分钟前
【Java】QBC检索和本地SQL检索
java·数据库·sql
wow_DG21 分钟前
【Vue2 ✨】Vue2 入门之旅 · 进阶篇(二):虚拟 DOM 与 Diff 算法
开发语言·javascript·vue.js·算法·前端框架
面汤放盐36 分钟前
互联网“黑话”生存实用指南(100)
java·后端
@小匠1 小时前
iText与OpenPDF使用差异及中文处理完全指南
java·pdf
小鹭同学_1 小时前
JavaWeb05
java
sali-tec1 小时前
C# 基于halcon的视觉工作流-章32-线线测量
开发语言·人工智能·算法·计算机视觉·c#
Gu Gu Study2 小时前
Spring运行程序RabbitMQ并没有自动创建队列的问题解决
java·spring cloud·rabbitmq
vortex52 小时前
Tomcat 日志文件名的命名规范
java·tomcat
little_xianzhong2 小时前
Java 日期字符串万能解析工具类(支持多种日期格式智能转换)
java·开发语言