用java语言设计程序模拟上课情景,要求有3个线程,即student1、student2和teacher。其中student1准 备睡觉10分钟后开始上课;其中student2也准备睡觉10分钟后开始上课;teacher在说了一句 “上课!”后吵醒休眠的线程student1,又说了一句“上课!”后吵醒休眠的线程student2。
时间: 2024-01-04 11:09:29 浏览: 126
以下是一个使用 Java 语言设计的模拟上课情景的程序,其中有三个线程(student1、student2、teacher),并且满足题目所述的条件:
```java
public class SimulationClass {
public static void main(String[] args) {
Student student1 = new Student("Student1", 10);
Student student2 = new Student("Student2", 10);
Teacher teacher = new Teacher();
student1.start();
student2.start();
teacher.start();
}
}
class Student extends Thread {
private String name;
private int sleepTime;
public Student(String name, int sleepTime) {
this.name = name;
this.sleepTime = sleepTime;
}
@Override
public void run() {
try {
System.out.println(name + " is sleeping for " + sleepTime + " minutes.");
Thread.sleep(sleepTime * 1000);
System.out.println(name + " is ready for class.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class Teacher extends Thread {
@Override
public void run() {
try {
System.out.println("Teacher: Class is about to begin.");
Thread.sleep(2000);
System.out.println("Teacher: Class starts now.");
synchronized (SimulationClass.class) {
SimulationClass.class.notifyAll();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
在这个程序中,我们定义了一个 `SimulationClass` 类作为程序的入口,它创建了两个 `Student` 对象和一个 `Teacher` 对象,并依次启动它们。
`Student` 类代表学生,每个学生有一个名字和一个睡眠时间,它重写了 `run()` 方法,表示学生在睡觉一段时间后准备上课。`Teacher` 类代表老师,它重写了 `run()` 方法,在说了两句话后唤醒所有休眠的学生线程。
在 `Teacher` 类的 `run()` 方法中,首先输出了一句话表示课程即将开始,然后让当前线程休眠 2 秒钟,模拟老师说了一句 “上课!” 的时间。接着,使用 `synchronized` 关键字锁定了 `SimulationClass` 类,调用了 `notifyAll()` 方法,唤醒了所有休眠的学生线程。这样,学生们就会在老师说完 “上课!” 后开始上课了。
阅读全文