gpt4 book ai didi

java - 银行转账同步

转载 作者:行者123 更新时间:2023-11-29 03:30:35 24 4
gpt4 key购买 nike

我在今天的面试中得到了这个问题。

class BankAccount {
private int money;

public synchronized void deposite(int sum) {
money += sum;
}

public synchronized void withdraw(int sum) {
money -= sum;
}

public synchronized int getMoney() {
return money;
}
}

class accountManager {
public void transfer(BankAccount a, BankAccount b, int money) {
}
}

所以我需要写 transfer() 方法,所以它是线程安全的,账户余额应该 >= 0。

public void transfer(BankAccount a, BankAccount b, int money) {
synchronized ( a ) {
synchronized ( b ) {
int temp = a.getMoney() - money;
if (temp >= 0) {
a.withdraw(temp);
b.add(temp);
}
}
}
}

我写了这个,但是当我们同时从 a 转移到 b 和从 b 转移到 a 时,它会产生死锁。那么第二个问题是,如何解决死锁?

最佳答案

你必须以相同的顺序锁定对象,否则你会陷入死锁。

顺便说一句:鉴于锁比执行的操作要昂贵得多,您最好使用全局锁或只使用一个线程。

关于java - 银行转账同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18487464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com