请用Java多线程模拟2个班级学生同时报数过程,需要模拟每两名同学报数时中间的停顿。 (要求:当*班的同学报数时控制台输出“*班第*人”,即输出结果为1班第1人、1班第2人、2班第1人、2班第2人、2班第3人....../
时间: 2023-01-11 13:55:36 浏览: 94
这是用 Java 实现的多线程模拟 2 个班级学生同时报数过程的示例代码:
```
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
public static void main(String[] args) throws InterruptedException {
// 创建两个 CountDownLatch 对象,用于控制班级的报数
CountDownLatch latch1 = new CountDownLatch(2);
CountDownLatch latch2 = new CountDownLatch(3);
// 创建两个班级的线程
Thread class1 = new Thread(new Class(latch1, latch2, 1));
Thread class2 = new Thread(new Class(latch1, latch2, 2));
// 启动线程
class1.start();
class2.start();
// 等待线程结束
latch1.await();
latch2.await();
}
}
class Class implements Runnable {
// 用于控制班级的报数
private CountDownLatch latch1;
private CountDownLatch latch2;
// 班级编号
private int classNum;
// 用于存储学生报数
private static AtomicInteger studentNum = new AtomicInteger(1);
public Class(CountDownLatch latch1, CountDownLatch latch2, int classNum) {
this.latch1 = latch1;
this.latch2 = latch2;
this.classNum = classNum;
}
@Override
public void run() {
try {
// 每个班级有两个学生
for (int i = 0; i < 2; i++) {
// 学生报数
System.out.println(classNum + "班第" + studentNum.getAndIncrement() + "人");
// 学生报完数后停顿一会儿
Thread.sleep(1000);
}
// 班级报数结束,计数器减一
latch1.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
// 每个班级有三个学生
for (int i = 0; i < 3; i++) {
// 学生报数
System.