如何避免 Java 线程死锁?

2021-04-29 20:50发布

7条回答
Java斗罗 - 每天都在写bug....
2021-05-10 19:08 .采纳回答

1.线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。

2.从根部解决(从产生死锁的原因入手)

  1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用

  2、不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。

  3、请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。

  4、循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样就形成了一个等待环路。

3.有序资源分配法

4.银行家算法


一周热门 更多>