编写多线程程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为2秒(sleep)。随机生成10个人,都要通过此山洞,用随机值对应的字符串表示人名,打印输出每次通过山洞的人名。提示:利用线程同步机制,过山洞用一条输出语句表示,该输出语句打印输出当前过山洞的人名,每个人过山洞对应一个线程,哪个线程执行这条输出语句,就表示哪个人过山洞。
package test;
public class pass{
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个山洞
Tunnel tul = new Tunnel();
//十个人过山洞
Thread p1 = new Thread(tul,"p1");
Thread p2 = new Thread(tul,"p2");
Thread p3 = new Thread(tul,"p3");
Thread p4 = new Thread(tul,"p4");
Thread p5 = new Thread(tul,"p5");
Thread p6 = new Thread(tul,"p6");
Thread p7 = new Thread(tul,"p7");
Thread p8 = new Thread(tul,"p8");
Thread p9 = new Thread(tul,"p9");
Thread p10 = new Thread(tul,"p10");
p1.start();
p2.start();
p3.start();
p4.start();
p5.start();
p6.start();
p7.start();
p8.start();
p9.start();
p10.start();
}
}
class Tunnel implements Runnable{
private int num = 0;
//override
public void run(){
Cross();
}
public synchronized void Cross(){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
num++;
System.out.println(Thread.currentThread().getName()+" 通过这个山洞"+" 这是第 "+num+"个");
}
}