编写多线程应用程序,模拟多个人通过一个山洞的模拟。
这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒(sleep),
随机生成3个人,同时准备过此山洞,显示一下每次通过山洞人的姓名及年龄,
以及过洞开始时间和结束时间-(字符串时间格式:15时30分20秒150毫秒)。
过山洞的过程:
1)大路上走,可以同时多个人进行
2)经过山洞,只能同时一个人走
3)经过立交桥,可以同时多个人进行
这个山洞每次只能通过一个人,每个人通过山洞的时间为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;
}
@Override
public 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;
}
}