java - 这种方法可能会出现死锁吗?我该如何预防?

标签 java deadlock

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);

在线程 1 中,a == oneb == two,但在线程 2 中,a == twob == 一个

因此当线程 1 获得对象一的锁时,线程 2 可以获得对象二的锁。然后当每个线程都试图进行下一步时,它们将陷入死锁。

关于java - 这种方法可能会出现死锁吗?我该如何预防?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30445186/

相关文章:

java - 如何从 ODATA 结果集中返回计数

java - 在 JPA (Hibernate) 中保存非持久对象 ID

java - 查找总和可被给定数字整除的三个数字

多线程事务的 MySQL 配置

转到 : Deadlock issue with go channel and select

sql-server-2008 - SQL Server 存储过程行号问题

java - 在java中,为什么闭包变量需要声明为final?

java - 多重就业和全局值(value)

concurrency - Io 语言如何自动检测死锁?

mysql - 如果不存在则插入行而不会出现死锁