使用Java的多线程来模拟这个场景,可以通过使用锁机制来避免资源竞争。下面是一个可能的实现方式:

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class BankAccountDemo {
    private static final int INITIAL_BALANCE = 500;
    private static final int WITHDRAW_AMOUNT = 400;

    private static int balance = INITIAL_BALANCE;
    private static Lock lock = new ReentrantLock();

    public static void main(String[] args) {
        Thread person1 = new Thread(new Person("存折"));
        Thread person2 = new Thread(new Person("卡"));

        person1.start();
        person2.start();
    }

    static class Person implements Runnable {
        private String method;

        public Person(String method) {
            this.method = method;
        }

        @Override
        public void run() {
            try {
                lock.lock();
                if (balance >= WITHDRAW_AMOUNT) {
                    System.out.println(Thread.currentThread().getName() + "正在使用" + method + "取钱...");
                    balance -= WITHDRAW_AMOUNT;
                    System.out.println(Thread.currentThread().getName() + "成功取出" + WITHDRAW_AMOUNT + "元,余额为" + balance + "元");
                } else {
                    System.out.println(Thread.currentThread().getName() + "余额不足,无法取钱");
                }
            } finally {
                lock.unlock();
            }
        }
    }
}

在上述代码中,我们使用了一个balance变量来表示银行账户的余额,并初始化为500元。lock对象是一个可重入锁,用来保护对balance变量的访问。

每个人都是一个独立的线程,通过实现Runnable接口并在run方法中实现取钱的逻辑。在run方法中,首先尝试获取锁,然后检查余额是否足够进行取钱操作。如果足够,就减去取款金额并输出相关信息;如果不足,就输出余额不足的提示信息。

通过使用锁机制,可以确保在取钱过程中不会出现资源竞争问题,即使多个线程同时进行取款操作。


原文地址: https://www.cveoy.top/t/topic/pHzH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录