《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
郝亚军9 分钟前
FE1.1S-BQFN24BT可以指定IP端口吗?
开发语言·php
阿里嘎多学长12 分钟前
2026-08-04 GitHub 热点项目精选
开发语言·程序员·github·代码托管
蔬菜_13 分钟前
前端转全栈-day2(修饰符)
java
fīɡЙtīиɡ ℡16 分钟前
怎么是用JWT
java·状态模式
唐青枫23 分钟前
Java JCommander 实战详解:用注解解析命令行参数
java
晴天1625 分钟前
Rust 快速入门 (从 JavaScript 开发者视角)-Day09
开发语言·javascript·rust
步行cgn1 小时前
carList.forEach(System.out::println)
java·开发语言·mybatis
进击的程序猿~1 小时前
Go 内存分配与垃圾回收源码深度学习手册
开发语言·后端·golang
plainGeekDev1 小时前
JUnit 4 → JUnit 5 + Kotlin
android·java·kotlin
plainGeekDev1 小时前
Mockito → MockK
android·java·kotlin