用java代码完成模拟三个老师同时发放80份学习笔记,要求每发一份都要按顺序打印笔记编号 提示:每个老师相当于一个线程
时间: 2024-03-10 17:46:48 浏览: 19
好的,下面是一个简单的 Java 代码示例:
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Teacher extends Thread {
private String name;
private int[] notes;
private Lock lock;
private int counter;
public Teacher(String name, int[] notes) {
this.name = name;
this.notes = notes;
this.lock = new ReentrantLock();
this.counter = 0;
}
@Override
public void run() {
for (int note : notes) {
lock.lock();
try {
counter++;
System.out.println(name + " 发放第 " + counter + " 份学习笔记,编号为 " + note);
} finally {
lock.unlock();
}
}
}
public static void main(String[] args) {
int[] notes = new int[80];
for (int i = 0; i < 80; i++) {
notes[i] = i + 1;
}
Teacher teacher1 = new Teacher("老师1", notes);
Teacher teacher2 = new Teacher("老师2", notes);
Teacher teacher3 = new Teacher("老师3", notes);
teacher1.start();
teacher2.start();
teacher3.start();
try {
teacher1.join();
teacher2.join();
teacher3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
在这个示例中,我们定义了一个 `Teacher` 类,每个老师相当于一个线程,每个老师都有自己的名字和要发放的学习笔记数组。在 `run` 方法中,我们使用了一个 `ReentrantLock` 来保证每个老师都按照顺序发放学习笔记,并且用一个计数器来记录发放的笔记编号。最后,我们创建了三个老师线程,并启动它们,最后等待所有线程执行完毕。
这个示例可能会有一些不足之处,但可以作为一个基本的思路参考。如果您有更好的解决方案,欢迎分享!