《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
hudawei9961 分钟前
flutter路由传参接收时机
开发语言·flutter·异步
3824278272 分钟前
python:Ajax爬取电影详情实战
开发语言·python·ajax
微爱帮监所写信寄信4 分钟前
微爱帮监狱写信寄信工具服务器【Linux篇章】再续:TCP协议——用技术隐喻重构网络世界的底层逻辑
linux·服务器·开发语言·网络·网络协议·小程序·监狱寄信
赵庆明老师24 分钟前
VS2026扩展插件Visual Commander
java·开发语言
额呃呃28 分钟前
信号量唤醒线程的实际机制
java·开发语言·jvm
程序员阿鹏33 分钟前
怎么理解削峰填谷?
java·开发语言·数据结构·spring·zookeeper·rabbitmq·rab
ht巷子36 分钟前
Qt:容器类的迭代
开发语言·c++·qt
shhpeng36 分钟前
Go语言中 的 defer 语句
开发语言·后端·golang
代码的奴隶(艾伦·耶格尔)38 分钟前
Sentinel限流熔断
java·前端·sentinel