Java--銀行口座入金スレッド設計1(インタラクティブスレッド)

6145 ワード

スレッド間では関係なく、インタラクティブになる可能性があります.一方,スレッドの同期メカニズムが同時に実行するインタラクティブスレッド間では時間に関するエラーがある.
public class account {

    private String name;
    private double balance;
    public account(String name) {
        this.name = name;
        this.balance=0;
    }
    public String getName() {
        return name;
    }
    public double getBalance() {
        return balance;
    }
    //
    public void put(double value){
        if(value>0){
            this.balance=this.balance+value;
        }

    }
    public double  get(double value){
        if(value>0){
            if(value<=balance){
                this.balance=this.balance-value;
            }else{
                value=this.balance;
                this.balance=0;
            }

        }
        return value;
    }
}
public class save extends Thread{
    private account a;
    private double value;

    public save(account a, double value) {
        this.a = a;
        this.value = value;
    }

    public void run() {
        double b=a.getBalance();
        a.put(value);
        System.out.println(a.getName()+" , "+b+", "
        +value+", "+a.getBalance());
    }


}
public class fetch extends Thread{
    private account a;
    private double value;

    public fetch(account a, double value) {
        this.a = a;
        this.value = value;
    }

    public void run() {
        double b=a.getBalance();
        System.out.println(a.getName()+" , "+b+", "
        +a.get(value)+", "+a.getBalance());
    }
}
public class bank {

    public static void main(String[] args) {

// account a1=new account("wang");
// save s1=new save(a1,100);
// save s1=new save(new account("wang"),100);
// s1.start();
        account a1=new account("wang");
        new save(a1,100).start();
        new save(a1,200).start();
        new fetch(a1,300).start();

        new save(new account("xu"),100).start();
    }

}

実行結果1:wang口座、既存0.0、預け入れ100.0、残高100.0 wang口座、既存100.0、取り出し100.0、残高0.0 wang口座、既存0.0、預け入れ200.0、残高200.0 xu口座、既存0.0、預け入れ100.0、残高100.0実行結果2:wang口座、既存0.0、預け入れ100.0、残高100.0 wang口座、既存100.0、預け入れ200.0、残高300.0 xu口座、既存0.0、預け入れ100.0、残高100.0 wang口座、既存300.0、取り出し300.0、残高0.0実行結果からスレッドが乱れていることがわかります