编写多线程应用程序,模拟多个人通过一个山洞的模拟

来源:互联网 发布:linux下安装anaconda 编辑:程序博客网 时间:2024/05/02 00:00
编写多线程应用程序,模拟多个人通过一个山洞的模拟。
  这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒(sleep),
 随机生成3个人,同时准备过此山洞,显示一下每次通过山洞人的姓名及年龄,
 以及过洞开始时间和结束时间-(字符串时间格式:15时30分20秒150毫秒)。
过山洞的过程:   
    1)大路上走,可以同时多个人进行
    2)经过山洞,只能同时一个人走
    3)经过立交桥,可以同时多个人进行

提示:根据提示知道洞里只能有一个人,所以所有人的开始时间和结束时间不能冲突。可使用synchronized关键字实现


public class Test1 {public static void main(String[] args) {demo();}private static void demo() {Person p1=new Person("王凯",18);Person p2=new Person("文华",18);Person p3=new Person("周华",18);ShanDong sd=new ShanDong("衡山");new Thread(new WalkTask(p1,sd)).start();new Thread(new WalkTask(p2,sd)).start();new Thread(new WalkTask(p3,sd)).start();}}class WalkTask implements Runnable{Person person;ShanDong sd;public WalkTask(Person person, ShanDong sd) {super();this.person = person;this.sd = sd;}@Overridepublic void run() {System.out.println("大路上走,可以同时多个人进行");System.out.println("大路上走,可以同时多个人进行");System.out.println("大路上走,可以同时多个人进行");this.walkshandong();System.out.println("经过立交桥,可以同时多个人进行");System.out.println("经过立交桥,可以同时多个人进行");System.out.println("经过立交桥,可以同时多个人进行");}private void walkshandong(){synchronized(this.sd){DateFormat df=new SimpleDateFormat("HH时mm分ss秒sss毫秒");System.out.println("经过山洞人的姓名:"+person.name+" 年龄:"+person.age);System.out.println("经过山洞人的开始时间:"+df.format(new Date()));try{Thread.sleep(5000);}catch(InterruptedException e){e.printStackTrace();}System.out.println("经过山洞人的结束时间:"+df.format(new Date()));}}}class Person{String name;int age;public Person(String name, int age) {super();this.name = name;this.age = age;}}class ShanDong{String name;public ShanDong(String name) {super();this.name = name;}}


0 0