《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
方也_arkling1 分钟前
【Java-Day12】接口
java·开发语言
SimonKing2 分钟前
Java程序员接入AI的另一种姿势:LangChain4j
java·后端·程序员
小小de风呀4 分钟前
de风——【从零开始学 C++】(十)vector的模拟实现
开发语言·c++
右耳朵猫AI10 分钟前
Rust技术周刊 2026年第20周
开发语言·后端·rust
vensli15 分钟前
消息跨端架构演进:基于 C++ 的多端一致性研发框架实践
java·人工智能·软件工程·安卓
云烟成雨TD15 分钟前
Spring AI Alibaba 1.x 系列【70】思考模式
java·人工智能·spring
逸Y 仙X15 分钟前
文章六:ElasticSearch 集群通信安全权限
java·大数据·服务器·elasticsearch·搜索引擎·全文检索
kaico201819 分钟前
Python 在 Jenkins Pipeline 中的使用总结
开发语言·python·jenkins
流浪00120 分钟前
C++篇:深入理解 C++ 智能指针:从裸指针到 RAII 的蜕变
开发语言·c++
丘山望岳21 分钟前
二叉搜索双壁——map和set
开发语言·数据结构·c++