1
我在今天的採訪中得到了這個問題。銀行轉帳同步
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) {
}
}
,所以我需要寫轉移()方法,所以這將是線程安全的賬戶餘額應爲> = 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同時進行。所以第二個問題是,如何解決僵局?
[避免死鎖示例]的可能重複(http://stackoverflow.com/questions/13326861/avoid-deadlock-example) – assylias
哦,thx assylias – Azaro