线程问题(银行账户两个人同时操作一个账户)

本文介绍了一个简单的银行类实现,该类使用同步方法控制多个线程同时进行取款操作的情况,确保了银行账户余额的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Bank {

/**
* 银行类
*/
private static double balance=1000.00;

/**
* 取款
* @param money 要取款的金额
*/
public synchronized static void withDraw(double money){


if(money<=balance){
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

balance-=money;
System.out.println("取款成功,卡上余额:"+balance);
}else {
System.out.println("卡上余额不足,请从新输入!");
}
}


}

/**
* @author user
*测试银行类
*/
public class BankTest extends Thread {



@Override
public void run() {
Bank.withDraw(800);
}

public static void main(String[] args) {

BankTest bt1 = new BankTest();//卡
bt1.start();

BankTest bt2 = new BankTest();//存折
bt2.start();

}

}

Java中,我们可以利用线程来模拟两个同时银行账户上存取钱的过程,这通常涉及到并发控制和同步机制,例如`synchronized`关键字或`ReentrantLock`。下面是一个简化的示例: ```java import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; class BankAccount { private double balance; private final Lock lock = new ReentrantLock(); private Condition depositCondition = lock.newCondition(); private Condition withdrawCondition = lock.newCondition(); public void deposit(double amount) { lock.lock(); try { if (amount > 0) { balance += amount; System.out.println("Thread " + Thread.currentThread().getName() + " deposited: " + amount); depositCondition.signalAll(); // 其他尝试存款的线程可以继续 } } finally { lock.unlock(); } } public synchronized void withdraw(double amount) { while (balance < amount) { try { withdrawCondition.await(); // 等待直到有足够的余额 } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } if (amount <= balance) { balance -= amount; System.out.println("Thread " + Thread.currentThread().getName() + " withdrew: " + amount); } else { System.out.println("Insufficient balance."); } } } public class BankTransaction { public static void main(String[] args) throws InterruptedException { BankAccount account = new BankAccount(); Thread t1 = new Thread(() -> account.deposit(500)); Thread t2 = new Thread(() -> account.withdraw(200)); t1.start(); t2.start(); t1.join(); t2.join(); } } ``` 在这个例子中,我们创建了一个`BankAccount`类,它有共享的`balance`变量和两个条件变量`depositCondition`和`withdrawCondition`,用于线程间的协作。当存款线程完成操作后会唤醒等待的取款线程,而取款线程只有在账户余额足够的情况下才会允许执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值