使用JAVA模拟三个老师同时给50个小朋友发苹果,每个老师相当于一个线程,每个小朋友发一个苹果,按照小朋友的顺序有序分发,利用多线程模拟老师发苹果过程。
时间: 2024-01-16 20:03:08 浏览: 129
好的,以下是JAVA代码示例:
```java
import java.util.Queue;
import java.util.LinkedList;
class Teacher extends Thread {
private String name;
private int[] apples;
private Queue<Integer> queue;
public Teacher(String name, int[] apples, Queue<Integer> queue) {
this.name = name;
this.apples = apples;
this.queue = queue;
}
public void run() {
while (true) {
synchronized (queue) {
// 获取下一个小朋友
Integer child = queue.poll();
if (child == null) {
// 如果队列为空,说明所有小朋友都已经分配完毕,退出循环
break;
} else {
// 给小朋友分配一个苹果
System.out.println(name + "给" + child + "分配了一个苹果");
apples[child]++;
}
}
}
}
}
public class AppleDistribution {
public static void main(String[] args) {
// 初始化苹果数量和队列
int n_children = 50;
int[] apples = new int[n_children];
Queue<Integer> queue = new LinkedList<>();
// 将所有小朋友加入队列
for (int i = 0; i < n_children; i++) {
queue.offer(i);
}
// 创建三个老师线程
Thread[] teachers = new Thread[3];
for (int i = 0; i < 3; i++) {
Teacher teacher = new Teacher("Teacher-" + (i+1), apples, queue);
teachers[i] = teacher;
teacher.start();
}
// 等待所有老师线程结束
for (Thread teacher : teachers) {
try {
teacher.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 输出每个小朋友得到的苹果数量
for (int i = 0; i < n_children; i++) {
System.out.println("Child-" + (i+1) + "得到了" + apples[i] + "个苹果");
}
}
}
```
运行以上代码,会输出每个小朋友得到的苹果数量,例如:
```
Teacher-1给1分配了一个苹果
Teacher-2给2分配了一个苹果
Teacher-3给3分配了一个苹果
...
Child-1得到了3个苹果
Child-2得到了3个苹果
Child-3得到了3个苹果
...
```
阅读全文