假如你遇到了Java线程死锁的概念问题

多线程以及多进程提高了系统资源的利用率以及系统的处理能力。然而,并发执行也带来了新的问题——死锁(DeadLock)。

所谓死锁指多个线程因竞争资源而造成的一种僵局(互相下饭,哦不互相等待),若无外力作用,这些进程都将无法向前推进。

也可以参考这篇优质文章:你的酒窝里有酒 - 线程死锁


常见的死锁解决办法:

    (1)破坏请求和保持条件:一次性的申请所有资源,之后不再申请资源。如果不满足资源条件则得不到资源分配。只获得初期资源运行,之后将运行完的资源释放,请求新的资源。

    (2)破坏不可抢占条件:当一个进程想要获得某种不可抢占资源,会提出新的资源申请。若不能满足,则释放所有资源,以后需要,再重新申请。

    (3)破坏循环等待条件:对资源进行排号,按照序号递增的顺序请求资源。若进程获得序号高的资源想要获取序号低的资源,就需要先释放序号高的资源。


Tips:IDEA工具可以使用 jps -l 显示正在运行的虚拟机进程,也可以使用 jstack + 线程ID 对出现的问题进行跟踪排查。


以下列出几种常用的防止线程互相下饭,哦不互相等待的方法:

规避线程死锁 - 打破单独持有,互相等待的僵局

规避线程死锁 - 允许线程抢占资源

规避线程死锁 - 终止线程循环等待

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值