《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
雨中飘荡的记忆29 分钟前
深度详解Spring Context
java·spring
Tao____33 分钟前
JAVA开源物联网平台
java·物联网·mqtt·开源·ruoyi
Lhuu(重开版43 分钟前
JS:正则表达式和作用域
开发语言·javascript·正则表达式
yqd6661 小时前
SpringSecurity的使用
java·spring
仙俊红1 小时前
Java Map 家族核心解析
java·开发语言
浅念-1 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
一嘴一个橘子1 小时前
springMvc 接收参数、cookie、header
java
code_li2 小时前
聊聊支付宝架构
java·开发语言·架构
少控科技3 小时前
QT高阶日记01
开发语言·qt
CC.GG3 小时前
【Linux】进程概念(五)(虚拟地址空间----建立宏观认知)
java·linux·运维