《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
Deschen37 分钟前
设计模式-原型模式
java·设计模式·原型模式
麦麦鸡腿堡41 分钟前
Java的动态绑定机制(重要)
java·开发语言·算法
时间之里41 分钟前
【c++】:Lambda 表达式介绍和使用
开发语言·c++
それども42 分钟前
SpringBootTest运行线程池被拒绝
java
Tiger_shl1 小时前
C# 预处理指令 (# 指令) 详解
开发语言·c#
介一安全1 小时前
【Frida Android】基础篇6:Java层Hook基础——创建类实例、方法重载、搜索运行时实例
android·java·网络安全·逆向·安全性测试·frida
xyy20251 小时前
Spring事务的传播方式
java·数据库·spring
@Kerry~1 小时前
phpstudy .htaccess 文件内容
java·开发语言·前端
roshy1 小时前
x86、arm、rsc-v指令集架构,指令集、OS、应用3者的关系
java·arm开发·架构
CRMEB系统商城1 小时前
CRMEB多商户系统(PHP)v3.3正式发布,同城配送上线[特殊字符]
java·开发语言·小程序·php