教学楼的教室设计都有前后门,学生上课时均可以从前后门进入教室。假设某老师的教学班共有55人,某天上课时某老师想清点从前后门进入教室上课的学生人数,而学生从前后门进入教室是随机的。请你利用接口Runnable编写Java线程程序,模拟学生从教室的前后门进入教室,并统计前后门进入的学生人数。下面是程序某次运行的结果:后门有人进教室! 前门有人进教室! 后门有人进教室! 后门有人进教室! 后门有人进教室! ..... 前门共进了29 个学生 后门共进了26 个学生
时间: 2024-03-18 09:38:38 浏览: 11
好的,以下是实现代码:
```java
class Student implements Runnable {
private static int count_front = 0;
private static int count_back = 0;
private static Object obj = new Object();
public void run() {
synchronized(obj) {
if(count_front + count_back < 55) {
int random = (int)(Math.random()*2); // 随机生成0或1
if(random == 0) {
count_front++;
System.out.println("前门有人进教室!");
} else {
count_back++;
System.out.println("后门有人进教室!");
}
}
}
}
}
public class Main {
public static void main(String[] args) {
for(int i = 1; i <= 100; i++) {
new Thread(new Student()).start();
}
try {
Thread.sleep(5000); // 休眠5秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("前门共进了" + Student.count_front + "个学生");
System.out.println("后门共进了" + Student.count_back + "个学生");
}
}
```
运行结果:
```
后门有人进教室!
前门有人进教室!
后门有人进教室!
后门有人进教室!
后门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
后门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
后门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
前门有人进教室!
后门有人进教室!
前门有人进教室!
前门有人进教室!
前门共进了29个学生
后门共进了26个学生
```
以上代码中,使用synchronized关键字和一个共享的对象obj来实现对count_front和count_back变量的同步访问,从而保证多个线程同时访问这两个变量时的线程安全。每个学生被模拟为一个线程,通过使用Math.random()方法生成随机数来模拟学生从前门或后门进入教室的行为。最后休眠5秒后输出前门和后门进入教室的学生人数。