21xrx.com
2024-09-19 09:49:59 Thursday
登录
文章检索 我的文章 写文章
Java多线程解决示例问题的代码
2023-07-06 10:21:48 深夜i     --     --
Java 多线程 解决问题 示例 代码

Java作为一门高级编程语言,已成为众多开发人员的首选。Java的强大之处在于它支持多线程编程。多线程编程能够在Java中实现资源共享和数据交互,提高代码的运行效率。本文将介绍一个利用Java多线程解决示例问题的代码。

示例问题:有两个人A和B,他们同时在银行里取钱。银行余额为10000元,他们每次取的金额不定。当余额小于他们想要取款的金额时,银行就必须等待有人存款才能继续取款。请用Java编程实现。

Java多线程解决示例问题的代码如下:


public class Bank {

  private int balance = 10000;

  public synchronized void withdraw(int amount, String name) {

    if (balance < amount) {

      try {

        System.out.println(name + "取款等待存款");

        wait();

      } catch (InterruptedException e) {

        e.printStackTrace();

      }

    }

    balance -= amount;

    System.out.println(name + "取款" + amount + "元,余额为:" + balance + "元");

  }

  public synchronized void deposit(int amount, String name) {

    balance += amount;

    System.out.println(name + "存款" + amount + "元,余额为:" + balance + "元");

    notifyAll();

  }

}

public class Person implements Runnable {

  private Bank bank;

  private String name;

  public Person(Bank bank, String name)

    this.bank = bank;

    this.name = name;

  

  @Override

  public void run() {

    while (true) {

      int amount = (int) (Math.random() * 5000) + 1000;

      bank.withdraw(amount, name);

      try {

        Thread.sleep((long) (Math.random() * 1000));

      } catch (InterruptedException e) {

        e.printStackTrace();

      }

      bank.deposit(amount, name);

      try {

        Thread.sleep((long) (Math.random() * 1000));

      } catch (InterruptedException e) {

        e.printStackTrace();

      }

    }

  }

}

public class Main {

  public static void main(String[] args) {

    Bank bank = new Bank();

    Person personA = new Person(bank, "A");

    Person personB = new Person(bank, "B");

    Thread threadA = new Thread(personA);

    Thread threadB = new Thread(personB);

    threadA.start();

    threadB.start();

  }

}

在上面的示例代码中,Bank类实现了取款和存款的功能。通过synchronized修饰方法,实现了线程同步,保证了线程安全。在每次取款时,如果余额小于取款金额,线程就会等待。当有人存款时,线程就会被唤醒。

Person类实现了Runnable接口,用来模拟两个人取钱的过程。在每次取款和存款后,线程会随机休眠一段时间,模拟现实生活中人的行为。

Main类包含main()方法,用来演示Java多线程解决示例问题的代码。创建了两个Person对象并分别用两个线程去执行。通过启动线程,可以看到两个人在银行里取款和存款的过程。

通过以上代码,我们可以学到Java多线程编程的知识。掌握Java多线程编程,可以让我们的代码更具有弹性,并提高代码的运行效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复