这种方法是否可能导致死锁?我该如何预防?

布尔布尔
public void function(object a, object b){
    synchronized(a){
        synchronized (b){
           a.performAction(b);
           b.performAction(a);
        }
    }
}

具有2个线程的死锁?感谢您的回答!

所罗门慢

当然,

假设我们有两个对象,

Object one = ...;
Object two = ...;

并假设线程1调用:

function(one, two);

当线程2调用时:

function(two, one);

在线程1a == one和中b == two,但在线程2a == two和中b == one

因此,当线程1获得对对象1的锁定时,线程2可以获得对对象2的锁定。然后,当每个线程尝试执行下一步时,它们将陷入僵局。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章