《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
孟芳芳1 分钟前
JAVA 冒泡排序算法
java·算法
快乐非自愿3 分钟前
C++中的各种锁
java·c++·算法
Gauss松鼠会6 分钟前
GaussDB事务和并发控制机制
java·数据库·sql·华为云·gaussdb
小慧10247 分钟前
ROS2快速入门0--节点
开发语言·javascript·ecmascript
三次拒绝王俊凯9 分钟前
java求职学习day11
java·开发语言·学习
Q_274378510917 分钟前
django基于Python的电影推荐系统
java·后端·python·django
ZERO空白29 分钟前
spring task使用
java·后端·spring
Bingjia_Hu43 分钟前
使用 Python 的 pyttsx3 库进行文本转语音
开发语言·python·pyttsx3
xiao--xin44 分钟前
LeetCode100之括号生成(22)--Java
java·开发语言·算法·leetcode·回溯
java1234_小锋1 小时前
Redis是单线程还是多线程?
java·数据库·redis