多线程编程

1、编写一个多线程程序,演示两个人同时操作一个银行账户,一个人存钱,一个人取钱。

import java.util.*;

class BankAccount {
    private int balance = 0;

    // 同步方法,存款线程安全
    public synchronized void deposit(int amount) {
        balance += amount;
        System.out.println(Thread.currentThread().getName() + " 存入: " + amount + " , 当前余额: " + balance);
    }

    // 取款方法
    public synchronized void withdraw(int amount) {
        if (balance >= amount) {
            balance -= amount;
            System.out.println(Thread.currentThread().getName() + " 取出: " + amount + " , 当前余额: " + balance);
        } else {
            System.out.println(Thread.currentThread().getName() + " 取款失败,余额不足! 当前余额: " + balance);
        }
    }

    // 获取余额方法
    public synchronized int getBalance() {
        return balance;
    }
}

// 存款任务类
class DepositTask implements Runnable {
    private final BankAccount account;

    public DepositTask(BankAccount account) {
        this.account = account;
    }

    @Override
    public void run() {
        Random random = new Random();
        for (int i = 0; i < 5; i++) {
            int amount = random.nextInt(100) + 1; // 随机存入1到100之间的金额
            account.deposit(amount);
            try {
                Thread.sleep(100); // 模拟存款间隔
            } catch (InterruptedException e) {
                e.printStackTrace();
                Thread.currentThread().interrupt();
                return;
            }
        }
    }
}

// 取款任务类
class WithdrawTask implements Runnable {
    private final BankAccount account;

    public WithdrawTask(BankAccount account) {
        this.account = account;
    }

    @Override
    public void run() {
        Random random = new Random();
        for (int i = 0; i < 5; i++) {
            int amount = random.nextInt(100) + 1; // 随机取出1到100之间的金额
            account.withdraw(amount);
            try {
                Thread.sleep(100); // 模拟取款间隔
            } catch (InterruptedException e) {
                e.printStackTrace();
                Thread.currentThread().interrupt();
                return;
            }
        }
    }
}

public class BankSystem {

    public static void main(String[] args) {
        BankAccount account = new BankAccount();

        System.out.println("==== 银行账户多线程操作演示 ====");
        System.out.println("初始余额: " + account.getBalance() + " 元");
        System.out.println();

        // 创建存款线程
        Thread depositor = new Thread(new DepositTask(account), "存款者");
        // 创建取款线程
        Thread withdrawer = new Thread(new WithdrawTask(account), "取款者");

        // 启动线程
        depositor.start();
        withdrawer.start();

        // 等待两个线程完成
        try {
            depositor.join();
            withdrawer.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
            Thread.currentThread().interrupt();
        }

        System.out.println("===== 操作结果 =====");
        System.out.println("最终余额: " + account.getBalance() + " 元");
    }
}
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容