《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
Filotimo_4 分钟前
在java开发中,什么是JSON格式
开发语言·json
Vic1010120 分钟前
解决 Spring Security 在异步线程中用户信息丢失的问题
java·前端·spring
咕噜签名-铁蛋24 分钟前
云服务器远程连接失败?
开发语言·php
QD_IT伟33 分钟前
SpringBoot项目整合Tlog 数据链路的规范加强
java·spring boot·后端
源码获取_wx:Fegn089533 分钟前
基于springboot + vue二手交易管理系统
java·vue.js·spring boot·后端·spring·课程设计
Zsh-cs34 分钟前
Spring
java·数据库·spring
爬山算法36 分钟前
Springboot请求和响应相关注解及使用场景
java·spring boot·后端
程序员水自流39 分钟前
MySQL InnoDB存储引擎详细介绍之事务
java·数据库·mysql·oracle
~无忧花开~1 小时前
Vue二级弹窗关闭错误解决指南
开发语言·前端·javascript·vue.js
请为小H留灯1 小时前
Java实际开发@常用注解(附实战场景)
java·后端·个人开发