《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
故事不长丨3 分钟前
C#线程的使用
java·microsoft·c#
小小8程序员6 分钟前
C# XAML中x:Type的用法详解
开发语言·ui·c#
豆沙沙包?8 分钟前
2025年--Lc297-3427. 变长子数组求和--java版
java
乐观主义现代人11 分钟前
go 面试
java·前端·javascript
非凡的世界12 分钟前
Webman 可能是 PHP 最强框架没有之一
开发语言·php·workman
Q***f63517 分钟前
Rust在嵌入式中的功耗优化
开发语言·后端·rust
Y***890819 分钟前
【JAVA进阶篇教学】第十二篇:Java中ReentrantReadWriteLock锁讲解
java·数据库·python
H***997620 分钟前
Rust包管理策略
开发语言·后端·rust
P***843923 分钟前
SpringBoot详解
java·spring boot·后端
7***533429 分钟前
PHP在微服务中的Phalcon
开发语言·微服务·php