这是一道题目要求编写一个Java应用程序,要求有student1、student2和teacher 3个线程,其中,student1准备好10分针后再开始上课,student2准备好1分钟后再开始上课,teacher就可以开始授课了。
时间: 2024-05-16 13:16:37 浏览: 58
以下是一个Java应用程序的示例代码,实现了题目要求的功能:
```java
public class Classroom {
public static void main(String[] args) {
Object lock = new Object(); // 定义一个共享的锁对象
// 定义学生1的线程
Thread student1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Student1 is preparing for 10 minutes.");
try {
Thread.sleep(10 * 60 * 1000); // 等待10分钟
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Student1 is ready.");
synchronized (lock) { // 获取锁对象
lock.notifyAll(); // 通知其他线程
}
}
});
// 定义学生2的线程
Thread student2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Student2 is preparing for 1 minute.");
try {
Thread.sleep(1 * 60 * 1000); // 等待1分钟
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Student2 is ready.");
synchronized (lock) { // 获取锁对象
lock.notifyAll(); // 通知其他线程
}
}
});
// 定义老师的线程
Thread teacher = new Thread(new Runnable() {
@Override
public void run() {
synchronized (lock) { // 获取锁对象
try {
lock.wait(); // 等待学生1和学生2准备好
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Teacher starts to teach.");
}
});
student1.start(); // 启动学生1的线程
student2.start(); // 启动学生2的线程
teacher.start(); // 启动老师的线程
}
}
```
程序中创建了一个共享的锁对象,学生1和学生2分别启动自己的线程并等待一定时间后准备好,然后使用共享的锁对象通知老师开始上课。老师在自己的线程中等待学生1和学生2准备好,然后开始授课。
阅读全文