当前位置:实例文章 » JAVA Web实例» [文章]多线程案例

多线程案例

发布人: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` 关键字来确保每次操作都是原子性的,不会导致账户余额的不一致。

其他信息

其他资源

Top