《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
爬山算法几秒前
Hibernate(15)Hibernate中如何定义一个实体的主键?
java·后端·hibernate
廋到被风吹走2 分钟前
【Spring】Spring AMQP 详细介绍
java·spring·wpf
stars-he4 分钟前
单相可控整流电路的MATLAB仿真设计(2)
开发语言·matlab
一起养小猫37 分钟前
LeetCode100天Day6-回文数与加一
java·leetcode
AC赳赳老秦1 小时前
政务数据处理:DeepSeek 适配国产化环境的统计分析与报告生成
开发语言·hadoop·spring boot·postgresql·测试用例·政务·deepseek
程序员小假1 小时前
我们来说一下 MySQL 的慢查询日志
java·后端
xlxxy_1 小时前
abap 批量创建供应商
运维·开发语言·sap·abap·pp·mm
独自破碎E2 小时前
Java是怎么实现跨平台的?
java·开发语言
To Be Clean Coder2 小时前
【Spring源码】从源码倒看Spring用法(二)
java·后端·spring
xdpcxq10292 小时前
风控场景下超高并发频次计算服务
java·服务器·网络