儿子主线程要取2000元钱,但账上只有500元,余额不足,因此发信号通知父亲(子线程)将钱存入账户并等待,父亲将钱款3000元存入账户后告知儿子款项已存入,儿子才能取款。请编程实现儿子线程和父亲线程的
时间: 2023-04-19 07:03:54 浏览: 156
根据您的描述,这是一个关于儿童主线程和父母线程的问题,要求儿童主线程需要支付2000元的款项,但账户上仅有500元,因此需要通知父母线程将款项存入账户中。当父母线程将3000元存入账户后,通知儿童主线程已经存入款项,这时儿童主线程才能取款。
以下是一个可能的代码实现:
儿童主线程:
```
class ChildThread extends Thread {
private final Object lock;
private int balance;
public ChildThread(Object lock, int balance) {
this.lock = lock;
this.balance = balance;
}
public void run() {
synchronized (lock) {
while (balance < 2000) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
balance -= 2000;
System.out.println("取出2000元,当前余额为:" + balance);
}
}
}
```
父母线程:
```
class ParentThread extends Thread {
private final Object lock;
private int balance;
public ParentThread(Object lock, int balance) {
this.lock = lock;
this.balance = balance;
}
public void run() {
synchronized (lock) {
balance += 3000;
System.out.println("存入3000元,当前余额为:" + balance);
lock.notifyAll();
}
}
}
```
测试代码:
```
public class Test {
public static void main(String[] args) {
Object lock = new Object();
int balance = 500;
ChildThread childThread = new ChildThread(lock, balance);
ParentThread parentThread = new ParentThread(lock, balance);
parentThread.start();
childThread.start();
}
}
```
这段代码中,通过使用 synchronized 和 wait/notifyAll 方法来保证线程之间的同步和通信。儿童主线程会等待父母线程存入款项,当款项到账后才能取款。父母线程存入款项后,通知儿童主线程已经存入,儿童主线程收到通知后才能取款。