用Java语言设计程序模拟上课情景,要求有3个线程,即student1、student2和teacher。其中student1准备睡觉10分钟后开始上课;其中student2也准备睡觉10分钟后开始上课;teacher在说了一句“上课!”后吵醒休眠的线程student1,又说了一句“上课!”后吵醒休眠的线程student2。
时间: 2024-01-04 10:14:08 浏览: 25
好的,以下是Java语言设计程序模拟上课情景的代码:
```java
public class ClassSimulation {
public static void main(String[] args) {
Student student1 = new Student("student1");
Student student2 = new Student("student2");
Teacher teacher = new Teacher();
Thread t1 = new Thread(student1);
Thread t2 = new Thread(student2);
Thread t3 = new Thread(teacher);
t1.start();
t2.start();
t3.start();
}
}
class Student implements Runnable {
private String name;
public Student(String name) {
this.name = name;
}
@Override
public void run() {
try {
System.out.println(name + " is sleeping...");
Thread.sleep(10000);
System.out.println(name + " is awake and ready for class.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class Teacher implements Runnable {
@Override
public void run() {
try {
System.out.println("Teacher: Class is starting!");
Thread.sleep(1000);
synchronized (this) {
System.out.println("Teacher: Wake up student1!");
notifyAll();
}
Thread.sleep(1000);
synchronized (this) {
System.out.println("Teacher: Wake up student2!");
notifyAll();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
在这个程序中,我们定义了三个类:`ClassSimulation`、`Student`和`Teacher`。
`ClassSimulation`类是程序的入口,它创建了两个`Student`对象和一个`Teacher`对象,并在三个线程中启动它们。
`Student`类实现了`Runnable`接口,表示它是一个可以运行在线程中的类。在`run()`方法中,我们首先输出了学生正在睡觉的信息,然后调用了`Thread.sleep()`方法使线程休眠10秒钟,最后输出了学生醒来准备上课的信息。
`Teacher`类同样实现了`Runnable`接口。在`run()`方法中,老师首先输出了“上课!”的提示信息,然后让线程休眠1秒钟。接着,老师使用`synchronized`关键字锁定了自己,然后调用了`notifyAll()`方法,唤醒了正在等待锁的线程student1。等student1运行完毕后,老师再次使用`synchronized`关键字锁定自己,然后调用`notifyAll()`方法,唤醒正在等待锁的线程student2。这样,两个学生就都被唤醒了,准备开始上课了。