《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
diediedei6 分钟前
C++类型推导(auto/decltype)
开发语言·c++·算法
索荣荣8 分钟前
Java动态代理实战:从原理到精通
java·开发语言
兩尛12 分钟前
c++的数组和Java数组的不同
java·开发语言·c++
roman_日积跬步-终至千里21 分钟前
【Java并发】多线程/并发问题集
java·开发语言
调皮连续波(rsp_tiaopige)24 分钟前
毫米波雷达 : OpenRadar(Matlab版本)正式发布
开发语言·matlab
冷雨夜中漫步35 分钟前
python反转列表reverse()和[::-1]哪个效率更高
开发语言·python
rainbow688938 分钟前
Python面向对象编程与异常处理实战
开发语言·python
それども41 分钟前
什么是MalformedStreamException,和WebKitFormBoundary有什么关系
java
你撅嘴真丑1 小时前
第八章 - 贪心法
开发语言·c++·算法
思想在飞肢体在追1 小时前
Springboot项目配置Nacos
java·spring boot·后端·nacos