java代码题 穿过隧道_多线程练习题目--多人通过同一隧道

多线程练习题目

使用多线程编程模拟多人通过一个隧道的情形。

假设隧道每次只允许一个人通过,每人通过隧道所需要的时间为5秒钟。随机产生5个人,同时准备通过隧道,依次显示出每次通过隧道的人的信息

/**

* 人类

*

* @author 小明

*

*/

public class Person extends Thread {

private static Object tunnel = new Object(); // 隧道对象

private String name; // 名称

public Person(String name) {

super();

this.name = name;

}

@Override

public void run() {

// 同步代码块,锁定隧道对象

synchronized (tunnel) {

System.out.println(this.name + " 准备过隧道");

System.out.println(this.name + " 正在过隧道...");

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(this.name + " 已通过隧道...");

}

}

}

因为每个人都需要单独通过隧道,隧道是被所有线程所共享的资源,我们应该使该对象在各线程中访问时互斥,所以使用同步代码块

测试

public class Test {

public static void main(String[] args) {

for(int i = 0; i < 5; i++){

new Person("tommy" + (i+1)).start();

}

}

}

结果

tommy1 准备过隧道

tommy1 正在过隧道...

tommy1 已通过隧道...

tommy5 准备过隧道

tommy5 正在过隧道...

tommy5 已通过隧道...

tommy4 准备过隧道

tommy4 正在过隧道...

tommy4 已通过隧道...

tommy3 准备过隧道

tommy3 正在过隧道...

tommy3 已通过隧道...

tommy2 准备过隧道

tommy2 正在过隧道...

tommy2 已通过隧道...

因线程执行的先后问题,可能结果不一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值