Java多线程同步示例(银行卡存取款) 5年前

Bank类,定义账号、账号余额属性,定义存款方法与取款方法并上同步

package person.xsc.practice;
import java.util.Scanner;
public class Bank {
    private String account;// 账号
    private int balance;// 账户余额
    public Bank(String account, int balance) {
        this.account = account;
        this.balance = balance;
    }
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public int getBalance() {
        return balance;
    }
    public void setBalance(int balance) {
        this.balance = balance;
    }
    @Override
    public String toString() {
        return "Bank [账号:" + account + ", 余额:" + balance + "]";
    }
    // 存款
    public synchronized void saveAccount() {
        // 获取当前的账号余额
        int balance = getBalance();
        // 修改余额
        balance +=100;
        // 修改账户余额
        setBalance(balance);
        // 输出存款后的账户余额
        System.out.println(account+"存款后的账户余额为:" + balance);
    }

    public synchronized void drawAccount() {
            // 获得当前的帐户余额
            int balance = getBalance();
            // 修改余额
            balance = balance - 200;
            // 修改帐户余额
            setBalance(balance);
            System.out.println(account+"取款后的帐户余额:" + balance);
    }
}

取款线程

package person.xsc.practice;
//取款
public class DrawAccount implements Runnable{
    Bank bank;
    public DrawAccount(Bank bank){
        this.bank=bank;
    }
    @Override
    public void run() {
        bank.drawAccount();
    }

}

存款线程

package person.xsc.practice;
//存款
public class SaveAccount implements Runnable{
    Bank bank;
    public SaveAccount(Bank bank){
        this.bank=bank;
    }
    public void run(){
        bank.saveAccount();
    }
}

测试类

package person.xsc.practice;
public class Test {
    public static void main(String[] args) {
        // 创建帐户,给定余额为1000
        Bank bank=new Bank("1001",1000);
        //创建线程对象
        SaveAccount sa=new SaveAccount(bank);
        DrawAccount da=new DrawAccount(bank);
        Thread save=new Thread(sa);
        Thread draw=new Thread(da);
        save.start();
        draw.start();
        try {
            save.join();
            draw.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(bank);
    }

}

输出

1001存款后的账户余额为:1100
1001取款后的帐户余额:900
Bank [账号:1001, 余额:900]
image
水母G
我什么也没忘,但是有些事只适合收藏。不能说也不能想,却又不能忘。
6
发布数
0
关注者
4675
累计阅读

热门教程文档

Linux
51小节
MyBatis
19小节
QT
33小节
C++
73小节
Rust
84小节
广告