《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
程序员小假5 分钟前
向量检索的流程是怎样的?Embedding 和 Rerank 各自的作用?
java·后端
yaaakaaang23 分钟前
二十二、模板方法模式
java·模板方法模式
Wmenghu23 分钟前
Ubuntu手动安装jdk;Ubuntu手动安装Maven;Ubuntu手动安装RocketMQ;Ubuntu手动安装RocketMQ-Dashbo
java·linux·ubuntu
后置的猿猴25 分钟前
Spring 循环依赖
java·后端·spring
SeSs IZED27 分钟前
SSM与Springboot是什么关系? -----区别与联系
java·spring boot·后端
t***54428 分钟前
如何在Dev-C++中选择Clang编译器
开发语言·c++
橙子1991101628 分钟前
Java 基础相关
java·开发语言
勿忘,瞬间29 分钟前
SpringBoot配置文件
java·spring boot·后端
fTiN CAPA39 分钟前
Tomcat 都有哪些核心组件
java·tomcat·firefox