《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
easyboot2 分钟前
C#使用pythonnet简单示例
开发语言·python·c#
浅水壁虎6 分钟前
任务调度——XXLJOB3(执行器)
java·服务器·前端·spring boot
晚霞的不甘7 分钟前
Flutter 布局核心:构建交互式文档应用
开发语言·javascript·flutter·elasticsearch·正则表达式
少控科技15 分钟前
QT新手日记 030
开发语言·qt
CC.GG20 分钟前
【C++】异常
java·jvm·c++
小此方31 分钟前
Re:从零开始的 C++ STL篇(三)string的疑难问题详细解析:深拷贝,写时拷贝,三个swap
开发语言·c++
荒诞硬汉32 分钟前
抽象相关学习
java·学习
凸头35 分钟前
一个小问题:Swagger 不显示 VO,Swagger 泛型丢失
java
Pluchon37 分钟前
硅基计划4.0 算法 动态规划高阶
java·数据结构·算法·leetcode·深度优先·动态规划
Linux猿37 分钟前
基于Python的图书管理系统(可执行源码+详细报告+详细注释+运行步骤)
开发语言·python·毕业设计·课程设计·管理系统·图书管理系统项目