トピックの詳細:
6-3 jmu-Java-07マルチスレッド-同期アクセス(10ポイント)
これで、プロパティAccount
を持つクラスができました:メソッド:対応するゲッターメソッド。private int balance
このクラスのために書く必要があります:void deposit(int money)
//お金を預け、残高にお金void withdraw(int money)
を追加します//お金を引き出し、残高からお金を引きます
知らせ:
- お金を引き出すとき
balance<0
、例外がスローされます。マルチスレッドの場合、入金用のスレッドが1つだけで、出金用のスレッドが複数あると、例外が発生する可能性があります。 - この問題を解決するには、完全な入金方法と引き出しコードの前半を作成する必要があります。
レフリーテスト手順:
import java.util.Scanner;
//这里是已有的Account类前半部分的代码
/*这里是deposit代码*/
/*这里是withdraw代码的前半部分*/
if(balance<0) //这里是withdraw代码的后半部分。
throw new IllegalStateException(balance+"");
}
/*系统已有代码,无需关注*/
入力サンプル:
それらは、初期残高、預金時間、預金額
、引き出し時間、および引き出し額です。3つのスレッドがあります。
0 100000 12
100000 4
サンプル出力:
バランス:スレッドを使用して不足した結果。
バランス:存钱次数*存钱金额 - 取钱次数*取钱金额*3
0
0
回答コード:
synchronized void deposit(int money){
balance+=money;
notify();
}
synchronized void withdraw(int money){
while(balance-money<0)
try{
wait();
}catch(InterruptedException e){}
balance-=money;
notify();