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

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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值