编写多线程程序,模拟多个人通过一个山洞的模拟。这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒,有10个人同时准备过此山洞,显示每次通过山洞人的姓名和顺序。
时间: 2023-04-25 22:05:17 浏览: 199
可以使用Java的多线程技术来编写这个程序。首先需要创建一个名为“Cave”的类,表示山洞。这个类需要有一个方法,用于让一个人通过山洞,这个方法需要使用synchronized关键字来保证同一时间只有一个人通过山洞。在这个方法中,需要使用Thread.sleep()方法来模拟每个人通过山洞的时间为5秒。
接下来,创建一个名为“Person”的类,表示每个人。这个类需要有一个属性,表示这个人的姓名。在这个类中,需要使用Thread类来创建一个线程,用于让这个人通过山洞。在这个线程中,需要调用Cave类的方法来通过山洞,并在通过完成后输出这个人的姓名和通过顺序。
最后,在主函数中创建10个Person对象,并启动它们的线程,让它们通过山洞。在输出姓名和通过顺序时,可以使用AtomicInteger类来保证输出的顺序是正确的。
下面是示例代码:
```
import java.util.concurrent.atomic.AtomicInteger;
public class Cave {
private static AtomicInteger order = new AtomicInteger();
public synchronized void pass(Person person) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(person.getName() + " passed the cave, order: " + order.incrementAndGet());
}
}
public class Person implements Runnable {
private String name;
private Cave cave;
public Person(String name, Cave cave) {
this.name = name;
this.cave = cave;
}
public String getName() {
return name;
}
@Override
public void run() {
cave.pass(this);
}
}
public class Main {
public static void main(String[] args) {
Cave cave = new Cave();
for (int i = 1; i <= 10; i++) {
Person person = new Person("Person " + i, cave);
new Thread(person).start();
}
}
}
```
阅读全文