《Java核心技术I》死锁

死锁

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

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

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

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

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

待续。。。

相关推荐
lbb 小魔仙12 小时前
基于Python构建RAG(检索增强生成)系统:从原理到企业级实战
开发语言·python
代码的小搬运工13 小时前
UITableView
开发语言·ui·ios·objective-c
刚子编程13 小时前
C# Join 深度解析:参数顺序、多表关联与空值处理最佳实践
开发语言·c#·最佳实践·join·多表关联·空值处理
mzhan01713 小时前
Linux: compare的直观性
java·linux·服务器
AbandonForce13 小时前
哈希表(HashTable,散列表)个人理解
开发语言·数据结构·c++·散列表
mask哥13 小时前
力扣算法java实现汇总整理(下)
java·算法·leetcode
代码中介商13 小时前
栈结构完全指南:顺序栈实现精讲
c语言·开发语言·数据结构
平凡但不平庸的码农13 小时前
Go 错误处理详解
开发语言·后端·golang
小陈的进阶之路13 小时前
Python系列课(2)——判断
java·前端·python
刚子编程13 小时前
C# Join 进阶:GroupJoin、性能对决与自定义比较器
java·servlet·c#·join