java模拟三个老师同时给50个小朋友发苹果,每个老师相当于一个线程,每个小朋友发一个苹果,按照小朋友的顺序有序分发,利用多线程模拟老师发苹果过程。
时间: 2024-03-10 11:44:08 浏览: 27
可以使用Java中的多线程机制来模拟三个老师同时给50个小朋友发苹果的过程,具体实现可以参考下面的代码:
```java
public class Teacher implements Runnable {
private static final int NUM_OF_CHILDREN = 50; // 小朋友的数量
private static final int NUM_OF_APPLES = 50; // 苹果的数量
private static final Object lock = new Object(); // 共享的锁
private int id;
private int appleCount = 0; // 当前已经发出的苹果数量
public Teacher(int id) {
this.id = id;
}
@Override
public void run() {
for (int i = 0; i < NUM_OF_CHILDREN; i++) {
synchronized (lock) {
// 按照顺序给每个小朋友发一个苹果
while (appleCount >= NUM_OF_APPLES) {
try {
lock.wait(); // 等待其他老师发完苹果
} catch (InterruptedException e) {
e.printStackTrace();
}
}
appleCount++;
System.out.println("Teacher " + id + " gives an apple to Child " + (i + 1));
lock.notifyAll(); // 唤醒其他老师
}
}
}
}
```
上述代码中,`Teacher`类实现了`Runnable`接口,表示每个老师对应一个线程。在`run()`方法中,使用`synchronized`关键字来获取共享锁,然后按照顺序给每个小朋友发一个苹果,发完后调用`notifyAll()`方法唤醒其他老师。如果当前已经发完了50个苹果,则调用`wait()`方法等待其他老师发完苹果。
接下来,可以编写一个主类来创建三个老师的线程并启动它们:
```java
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(new Teacher(1));
Thread t2 = new Thread(new Teacher(2));
Thread t3 = new Thread(new Teacher(3));
t1.start();
t2.start();
t3.start();
}
}
```
运行上述代码,可以看到控制台输出每个小朋友收到的苹果,同时保证每个小朋友都只收到了一个苹果,并且按照顺序依次发放。