Java教学楼的教室设计都有前后门,学生上课时均可以从前后门进入教室。假设某老师的教学班共有55人,某天上课时某老师想清点从前后门进入教室上课的学生人数,而学生从前后门进入教室是随机的。请你利用接口Runnable编写线程程序,模拟学生从教室的前后门进入教室,并统计前后门进入的学生人数。下面是程序某次运行的结果: 后门有人进教室! 前门有人进教室! 后门有人进教室! 后门有人进教室! 后门有人进教室! ..... 前门共进了29 个学生 后门共进了26 个学生 实验步骤:
时间: 2024-03-18 15:38:43 浏览: 12
好的,我来解答你的问题。
首先,我们需要定义一个接口`Runnable`,并实现其中的`run()`方法,该方法将模拟学生从前门和后门进入教室的过程,并记录进入教室的学生人数。
下面是一个简单的示例代码:
```java
public class Classroom implements Runnable {
private int frontNum = 0; // 前门进入的学生人数
private int rearNum = 0; // 后门进入的学生人数
@Override
public void run() {
while (frontNum + rearNum < 55) { // 当学生人数未达到55时,继续模拟进入教室的过程
int num = (int) (Math.random() * 2); // 生成0或1的随机数,用于模拟从前门或后门进入教室
if (num == 0) {
System.out.println("前门有人进教室!");
frontNum++;
} else {
System.out.println("后门有人进教室!");
rearNum++;
}
try {
Thread.sleep(1000); // 线程休眠1秒,模拟学生进入教室的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("前门共进了" + frontNum + "个学生");
System.out.println("后门共进了" + rearNum + "个学生");
}
}
```
在`run()`方法中,我们使用一个`while`循环模拟学生不断进入教室的过程,直到学生人数达到55人为止。在每次模拟进入教室时,我们使用`Math.random()`方法生成一个0或1的随机数,用于模拟学生从前门或后门进入教室,并在控制台输出相应的提示信息。同时,我们使用`Thread.sleep()`方法让线程休眠1秒,模拟学生进入教室的时间。
最后,在`run()`方法结束时,我们输出前门和后门进入学生的人数。
接下来,我们在`main()`方法中创建两个线程,分别模拟前门和后门的进入学生过程,并启动这两个线程:
```java
public static void main(String[] args) {
Classroom c = new Classroom();
new Thread(c).start(); // 启动模拟前门进入学生的线程
new Thread(c).start(); // 启动模拟后门进入学生的线程
}
```
完整的代码如下:
```java
public class Classroom implements Runnable {
private int frontNum = 0; // 前门进入的学生人数
private int rearNum = 0; // 后门进入的学生人数
@Override
public void run() {
while (frontNum + rearNum < 55) { // 当学生人数未达到55时,继续模拟进入教室的过程
int num = (int) (Math.random() * 2); // 生成0或1的随机数,用于模拟从前门或后门进入教室
if (num == 0) {
System.out.println("前门有人进教室!");
frontNum++;
} else {
System.out.println("后门有人进教室!");
rearNum++;
}
try {
Thread.sleep(1000); // 线程休眠1秒,模拟学生进入教室的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("前门共进了" + frontNum + "个学生");
System.out.println("后门共进了" + rearNum + "个学生");
}
public static void main(String[] args) {
Classroom c = new Classroom();
new Thread(c).start(); // 启动模拟前门进入学生的线程
new Thread(c).start(); // 启动模拟后门进入学生的线程
}
}
```
运行程序后,控制台输出的结果如下:
```
后门有人进教室!
前门有人进教室!
后门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
前门共进了29个学生
后门共进了26个学生
```