多线程案例
发布人:shili8
发布时间:2025-02-11 15:24
阅读次数:0
**多线程案例**
在计算机编程中,多线程是指一个程序可以同时执行多个线程的功能。每个线程都有自己的执行栈和局部变量,线程之间共享同一块内存空间。在 Java 中,我们可以使用 `Thread` 类来实现多线程。
**案例描述**
我们将创建一个银行系统,模拟多个客户同时进行取款和存款操作。每个客户都有自己的账户余额,我们需要确保每次操作都是原子性的,不会导致账户余额的不一致。
**代码示例**
java// BankAccount.javapublic class BankAccount { private double balance; public BankAccount(double initialBalance) { this.balance = initialBalance; } public synchronized void deposit(double amount) { balance += amount; System.out.println("客户 " + Thread.currentThread().getName() + " 存入了 " + amount); } public synchronized void withdraw(double amount) { if (balance >= amount) { balance -= amount; System.out.println("客户 " + Thread.currentThread().getName() + " 取出了 " + amount); } else { System.out.println("客户 " + Thread.currentThread().getName() + " 的余额不足"); } } public double getBalance() { return balance; } }
java// Bank.javapublic class Bank { private BankAccount account; public Bank(BankAccount account) { this.account = account; } public void deposit(double amount) { account.deposit(amount); } public void withdraw(double amount) { account.withdraw(amount); } }
java// Client.javapublic class Client extends Thread { private Bank bank; private double initialBalance; public Client(Bank bank, double initialBalance) { this.bank = bank; this.initialBalance = initialBalance; } @Override public void run() { // 每个客户都有自己的账户余额 BankAccount account = new BankAccount(initialBalance); // 客户进行取款和存款操作 for (int i =0; i < 10; i++) { bank.withdraw(100); bank.deposit(50); } System.out.println("客户 " + Thread.currentThread().getName() + " 的余额为 " + account.getBalance()); } }
java// Main.javapublic class Main { public static void main(String[] args) { // 创建银行系统 Bank bank = new Bank(new BankAccount(1000)); // 创建多个客户 Client client1 = new Client(bank,500); Client client2 = new Client(bank,2000); // 启动客户线程 client1.start(); client2.start(); try { // 等待客户线程结束 client1.join(); client2.join(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } System.out.println("银行系统关闭"); } }
**注释**
* 在 `BankAccount` 类中,我们使用了 `synchronized` 关键字来确保每次操作都是原子性的,不会导致账户余额的不一致。
* 在 `Client` 类中,我们创建了多个客户,每个客户都有自己的账户余额和取款和存款操作。
* 在 `Main` 类中,我们创建了银行系统,启动了多个客户线程,并等待它们结束。
**总结**
在这个案例中,我们使用了 Java 的多线程机制来模拟一个银行系统。每个客户都有自己的账户余额和取款和存款操作,我们使用 `synchronized` 关键字来确保每次操作都是原子性的,不会导致账户余额的不一致。