编写多线程程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为2秒(sleep)。随机生成10个人,都要通过此山洞,用随机值对应的字符串表示人名,打印输出每次通过山洞的人名。提示:利用线程同步机制,过山洞用一条输出语句表示,该输出语句打印输出当前过山洞的人名,每个人过山洞对应一个线程,哪个线程执行这条输出语句,就表示哪个人过山洞:
public class Test {
public static void main(String[] args) {
Pass shandong = new Pass(); //创建shandong实例对象
Thread p1 = new Thread(shandong,"易购"); //创建线程对象并命名
Thread p2 = new Thread(shandong,"二狗");
Thread p3 = new Thread(shandong,"三狗");
Thread p4 = new Thread(shandong,"四狗");
Thread p5 = new Thread(shandong,"五狗");
Thread p6 = new Thread(shandong,"遛狗");
Thread p7 = new Thread(shandong,"气狗");
Thread p8 = new Thread(shandong,"巴狗");
Thread p9 = new Thread(shandong,"久狗");
Thread p10 = new Thread(shandong,"世购");
p2.start(); //start方法用于启动线程
p3.start();
p4.start();
p5.start();
p6.start();
p7.start();
p8.start();
p9.start();
p10.start();
p1.start();
}
}
class Pass extends Thread{//继承Thread类
public void run(){ //重写run方法
synchronized(this){//当多个线程访问同一个共享资源时,可以将处理共享资源的代码放置在一个代码块中,使用synchronized关键字来修饰
System.out.println(Thread.currentThread().getName()+"正在通过");
try {
sleep(5000);//线程休眠,完成休眠自动进入就绪状态
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
运行结果: