《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
2601_962885724 分钟前
如何用 Python 计算溃疡指数(Ulcer Index)?
开发语言·python
kiracrimson15 分钟前
string 容器:从 C 字符串到会自己扩容的类
开发语言·数据结构·c++·stl
code2cat20 分钟前
【随笔】RAG检索缓存:复用证据之前,先把权限和版本放进缓存键
java·人工智能·缓存·知识库·rag
程序边界27 分钟前
顶刊级论文配图全流程:用 Python 复刻 Nature/Science 风格图表
开发语言·python
普通人628 分钟前
uniapp模版JS
开发语言·javascript·小程序·uni-app·1024程序员节
\光辉岁月/35 分钟前
2.spring5-IOC
java·容器·ioc·注解
G018_star sky♬1 小时前
nodeJS他是如何用JavaScript封装C++的呢
开发语言·javascript·c++
java_nnnn1 小时前
Spring MVC小案例(1)
java·后端·spring·mvc
wyhwust1 小时前
程序设计基础--C语言输入输出单元测试
c语言·开发语言
西凉的悲伤1 小时前
Spring Boot 条件装配注解详解
java·springboot·1024程序员节·条件装配