《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
缺点内向几秒前
报表自动化进阶:Java精确操控Excel打印页边距的实战方法
java·开发语言·后端·自动化·excel
山沐与山几秒前
【Redis】双重判定锁详解:缓存击穿的终极解决方案
java·redis·缓存
寻星探路2 分钟前
深度解析网络编程套接字:从 Socket 底层原理到 Java 高性能实战
java·网络·人工智能·python·机器学习·php
AM越.2 分钟前
Java设计模式超详解--组合设计模式(含uml图)
java·设计模式·uml
qq_178057072 分钟前
IntelliJ IDEA is not responding报错解决
java·ide·intellij-idea
Predestination王瀞潞3 分钟前
Java EE数据访问框架技术(第三章:Mybatis多表关系映射-下)
java·java-ee·mybatis
T.Y.Bao3 分钟前
ConcurrentHashMap死循环问题
java
凌晨一点的秃头猪6 分钟前
KERAG_R详细分析:
开发语言
2301_797312266 分钟前
学习Java36天
java·开发语言·学习
studytosky6 分钟前
Linux系统编程:深度解析 Linux 进程,切换调度、环境变量与虚拟内存
linux·运维·服务器·开发语言·网络·c++