マルチスレッド-Javaへのアクセスの同期

トピックの詳細:

6-3 jmu-Java-07マルチスレッド-同期アクセス(10ポイント)

これで、プロパティAccountを持つクラスができました:メソッド:対応するゲッターメソッド。

private int balance

このクラスのために書く必要があります:
void deposit(int money)  //お金を預け、残高にお金
void withdraw(int money) を追加します//お金を引き出し、残高からお金を引きます

知らせ:

  1. お金を引き出すときbalance<0、例外がスローされます。マルチスレッドの場合、入金用のスレッドが1つだけで、出金用のスレッドが複数あると、例外が発生する可能性があります。
  2. この問題を解決するには、完全な入金方法と引き出しコードの前半を作成する必要があります。

レフリーテスト手順:

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

 

おすすめ

転載: blog.csdn.net/qq_54587141/article/details/121213910