java练习:要求设计一个线程程序妈妈和儿子妈妈存钱儿子取钱如果妈妈没有存钱儿子就不能取钱妈妈存完钱就等待儿子取钱儿子取完钱就通知妈妈存钱?
以下是一个满足要求的Java线程程序的示例代码:
class Bank {
private int balance;
private boolean momDeposit;
public Bank() {
balance = 0;
momDeposit = false;
}
public synchronized void momDepositMoney(int amount) {
while (momDeposit) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
balance += amount;
System.out.println("妈妈存入了 " + amount + " 元");
momDeposit = true;
notify();
}
public synchronized void sonWithdrawMoney(int amount) {
while (!momDeposit) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (balance >= amount) {
balance -= amount;
System.out.println("儿子取出了 " + amount + " 元");
} else {
System.out.println("儿子想取出 " + amount + " 元,但是妈妈存的钱不够");
}
momDeposit = false;
notify();
}
}
class Mom implements Runnable {
private Bank bank;
private int depositAmount;
public Mom(Bank bank, int depositAmount) {
this.bank = bank;
this.depositAmount = depositAmount;
}
@Override
public void run() {
while (true) {
bank.momDepositMoney(depositAmount);
try {
Thread.sleep(2000); // 假设妈妈每隔2秒存一次钱
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Son implements Runnable {
private Bank bank;
private int withdrawAmount;
public Son(Bank bank, int withdrawAmount) {
this.bank = bank;
this.withdrawAmount = withdrawAmount;
}
@Override
public void run() {
while (true) {
bank.sonWithdrawMoney(withdrawAmount);
try {
Thread.sleep(3000); // 假设儿子每隔3秒取一次钱
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
Bank bank = new Bank();
int depositAmount = 100; // 妈妈每次存入100元
int withdrawAmount = 50; // 儿子每次取出50元
Thread momThread = new Thread(new Mom(bank, depositAmount));
Thread sonThread = new Thread(new Son(bank, withdrawAmount));
momThread.start();
sonThread.start();
}
}
在上述代码中,Bank类表示银行账户,包含一个balance变量表示余额,以及一个momDeposit变量表示妈妈是否存钱的标志。momDepositMoney方法用于妈妈存钱,sonWithdrawMoney方法用于儿子取钱。
Mom类和Son类分别实现Runnable接口,代表妈妈和儿子的线程。在run方法中,妈妈不断地存钱,儿子不断地取钱,直到程序结束。
在主函数中,创建了一个Bank对象和两个线程对象,分别代表妈妈和儿子的线程。然后启动这两个线程。妈妈每次存入100元,儿子每次取出50元。
运行程序后,可以看到妈妈存钱和儿子取钱的交替进行。当妈妈没有存钱时,儿子会等待;当妈妈存完钱后,儿子会被唤醒并取钱
原文地址: https://www.cveoy.top/t/topic/iEwb 著作权归作者所有。请勿转载和采集!