一、过山洞( 一次只能过1个人,一个人需要2S,在前一个人未完全通过之前后面的人不能进去)
多线程实现5个人过山洞,且打印每个通过人的名称和序号
①先创建实现Runnable接口的山洞类
public class Tunnel implements Runnable {
private Integer sequence = 1;
@Override
public void run() {
cross();
}
public synchronized void cross() {
try {
System.out.println(Thread.currentThread().getName() + "第" + sequence + "个开始穿过山洞");
Thread.sleep(2000);
sequence++;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
②五个人开始穿越
public class Start {
public static void main(String[] args) {
String[] peoples = {"A","B","C","D","E"};
Tunnel tunnel = new Tunnel();
for (String p : peoples) {
//此处将人名作为线程名
Thread t = new Thread(tunnel,p);
t.start();
}
}
}
运行结果
A第1个开始穿过山洞
D第2个开始穿过山洞
E第3个开始穿过山洞
C第4个开始穿过山洞
B第5个开始穿过山洞
二、过山洞加强版(不同组的人穿越不同的山洞,且每次打印山洞名称、通过人名称和顺序)