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

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

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

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


常见的死锁解决办法:

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

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

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


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


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

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_44965393/article/details/112728440
今日推荐