《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
谷粒.12 小时前
Cypress vs Playwright vs Selenium:现代Web自动化测试框架深度评测
java·前端·网络·人工智能·python·selenium·测试工具
云和数据.ChenGuang13 小时前
Ascend C 核心技术特性
c语言·开发语言
uzong16 小时前
程序员从大厂回重庆工作一年
java·后端·面试
kyle~16 小时前
C++---value_type 解决泛型编程中的类型信息获取问题
java·开发语言·c++
NiNi_suanfa19 小时前
【Qt】Qt 批量修改同类对象
开发语言·c++·qt
小糖学代码19 小时前
LLM系列:1.python入门:3.布尔型对象
linux·开发语言·python
Data_agent19 小时前
1688获得1688店铺详情API,python请求示例
开发语言·爬虫·python
妖灵翎幺20 小时前
C++ 中的 :: 操作符详解(一切情况)
开发语言·c++·ide
开心香辣派小星20 小时前
23种设计模式-15解释器模式
java·设计模式·解释器模式
Halo_tjn20 小时前
虚拟机相关实验概述
java·开发语言·windows·计算机