过山洞问题

来源:互联网 发布:天道编程txt下载 编辑:程序博客网 时间:2024/04/28 11:33

编写多线程程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为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+"个");            }}