. 模拟三个老师同时给50个小朋友发苹果,每个老师相当于一个线程。Java代码怎么写
时间: 2024-02-27 11:51:48 浏览: 107
同样的问题,这里提供一个使用 Java 语言的示例代码:
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Teacher extends Thread {
private String name;
private int apples;
private Lock lock;
public Teacher(String name, int apples, Lock lock) {
this.name = name;
this.apples = apples;
this.lock = lock;
}
@Override
public void run() {
while (true) {
lock.lock();
if (apples > 0) {
apples--;
System.out.println(name + " 发给一个小朋友一个苹果,还剩 " + apples + " 个苹果");
lock.unlock();
} else {
lock.unlock();
break;
}
}
}
public static void main(String[] args) throws InterruptedException {
int apples = 50;
Lock lock = new ReentrantLock();
Teacher[] teachers = new Teacher[3];
for (int i = 0; i < teachers.length; i++) {
teachers[i] = new Teacher("Teacher " + (i+1), apples, lock);
}
for (Teacher teacher : teachers) {
teacher.start();
}
for (Teacher teacher : teachers) {
teacher.join();
}
}
}
```
以上代码创建了一个 `Teacher` 类用于模拟老师的行为,每个老师都是一个线程。在 `main` 方法中,首先创建了一个锁对象 `lock` 用于保证对苹果的发放是同步的。然后创建了三个老师的线程,并启动这些线程。最后等待所有线程执行完毕。
在 `Teacher` 类中,首先定义了 `name`、`apples` 和 `lock` 成员变量,分别表示老师的名字、还剩下的苹果数量和用于同步的锁对象。在 `run` 方法中,首先获取锁对象 `lock`,然后判断苹果的数量是否大于 0。如果大于 0,则发给一个小朋友一个苹果,并打印此次发放的信息。否则释放锁对象并退出循环。
这样就实现了模拟三个老师同时给50个小朋友发苹果的功能。
阅读全文