jmu-Java-07多線程-同步訪問 (10分)
現已有Account
類,擁有
屬性:private int balance
方法:
相應的getter方法。
要求爲該類編寫:void deposit(int money)
//存錢,在餘額的基礎上加上moneyvoid withdraw(int money)
//取錢,在餘額的基礎上減去money
注意:
- 取錢時如果
balance<0
的時候,會拋出異常。在多線程情況下,如只有一個存錢的線程,但是有多個取錢的線程,很可能會拋出異常。 - 需要編寫完整的deposit方法與withdraw的前半部分代碼解決該問題。
裁判測試程序:
import java.util.Scanner;
//這裏是已有的Account類前半部分的代碼
/*這裏是deposit代碼*/
/*這裏是withdraw代碼的前半部分*/
if(balance<0) //這裏是withdraw代碼的後半部分。
throw new IllegalStateException(balance+"");
}
/*系統已有代碼,無需關注*/
public void deposit(int money) {
synchronized(this) {
this.balance+=money;
}
}
public void withdraw(int money) {
synchronized(this) {
if(this.balance>=money) {
this.balance -= money;
}
}