教学楼的教室设计都有前后门,学生上课时均可以从前后门进入教室。假设某老师的教学班共有55人,某天上课时某老师想清点从前后门进入教室上课的学生人数,而学生从前后门进入教室是随机的。请你利用接口Runnable编写线程程序,模拟学生从教室的前后门进入教室,并统计前后门进入的学生人数。
时间: 2024-02-22 11:58:06 浏览: 87
好的,我可以为您提供一个简单的解决方案。以下是代码实现:
```java
public class Classroom implements Runnable {
private int frontCount = 0; // 前门进入的学生人数
private int backCount = 0; // 后门进入的学生人数
@Override
public void run() {
for (int i = 0; i < 55; i++) {
int enter = (int)(Math.random() * 2); // 随机生成0或1
if (enter == 0) {
enterFromFront(); // 从前门进入
} else {
enterFromBack(); // 从后门进入
}
}
System.out.println("前门进入人数:" + frontCount + ",后门进入人数:" + backCount);
}
// 从前门进入
private synchronized void enterFromFront() {
System.out.println(Thread.currentThread().getName() + "从前门进入");
frontCount++;
}
// 从后门进入
private synchronized void enterFromBack() {
System.out.println(Thread.currentThread().getName() + "从后门进入");
backCount++;
}
}
```
在这个代码中,我们定义了一个 `Classroom` 类,实现了 `Runnable` 接口。在 `run()` 方法中,我们使用一个 `for` 循环模拟了 55 名学生进入教室的过程。每次循环,我们随机生成一个数字,如果是 0,就表示从前门进入,调用 `enterFromFront()` 方法;如果是 1,就表示从后门进入,调用 `enterFromBack()` 方法。这两个方法都是同步方法,可以保证线程安全。
最后,我们在 `run()` 方法结束时输出前后门进入的学生人数。
下面是一个简单的测试代码:
```java
public class Test {
public static void main(String[] args) {
Classroom classroom = new Classroom();
Thread thread1 = new Thread(classroom, "学生1");
Thread thread2 = new Thread(classroom, "学生2");
thread1.start();
thread2.start();
}
}
```
在这个测试代码中,我们创建了一个 `Classroom` 对象和两个线程对象 `thread1` 和 `thread2`。然后将 `classroom` 对象作为参数传递给这两个线程对象,并启动它们。这样,两个线程就可以模拟学生进入教室的过程了。
阅读全文