《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
ywf12159 分钟前
Spring Boot接收参数的19种方式
java·spring boot·后端
smchaopiao35 分钟前
Python中字典与列表合并的问题与解决方法
开发语言·python
敲代码的瓦龙1 小时前
Java?面向对象三大特性!!!
java·开发语言
2501_921649491 小时前
期货 Tick 级数据与基金净值历史数据 API 接口详解
开发语言·后端·python·websocket·金融·区块链
架构师沉默1 小时前
AI 写的代码,你敢上线吗?
java·后端·架构
野犬寒鸦1 小时前
Redis复习记录day1
服务器·开发语言·数据库·redis·缓存
小菜鸡桃蛋狗1 小时前
C++——类和对象(下)
开发语言·c++
骑龙赶鸭1 小时前
java开发项目中遇到的难点,面试!
java·开发语言·面试
张人玉1 小时前
C#通讯(上位机)常用知识点
开发语言·c#·通讯·上位机开发