java多线程练习1

xiaoxiao2021-02-28  88

5辆汽车过隧道,隧道一次只能通过一辆汽车, 每辆汽车通过时间不固定

 机动车通过时间3秒,  三轮车通过时间5秒,  蓄力车通过实践10秒,  5辆车分别是2辆机动车,2辆蓄力车,1辆三轮车  通过多线程模拟通过隧道的情况  提示:Car ThreeCar CowCar

1 class ThreadDemo2 2 { 3 public static void main(String[] args) 4 { 5 //初始化每辆车及经过隧道的时间 6 Car car1 = new Car("机动车1",3); 7 Car car2 = new Car("机动车2",3); 8 Car car3 = new Car("三轮车",5); 9 Car car4 = new Car("蓄力车1",10); 10 Car car5 = new Car("蓄力车2",10); 11 12 //每辆车开始抢隧道车道 13 car1.start(); 14 car2.start(); 15 car3.start(); 16 car4.start(); 17 car5.start(); 18 19 //待所有车辆通过隧道,报告进入隧道结束 20 try{ 21 car1.join(); 22 car2.join(); 23 car3.join(); 24 car4.join(); 25 car5.join(); 26 } 27 catch(Exception e){ 28 } 29 System.out.println("所有车都已经通过隧道了"); 30 } 31 } 32 33 //使用单个线程类实现 34 class Car extends Thread 35 { 36 private String name; 37 private int passTime; 38 private static Object ob = new Object(); 39 40 //构造初始化车名和车通过隧道时间 41 public Car(String name,int passTime){ 42 this.name = name; 43 this.passTime = passTime; 44 } 45 public void run(){ 46 pass(); 47 //每辆车进隧道的时候,谦让了下其他车辆 48 Thread.yield(); 49 } 50 51 //隧道外车辆从多车道合流到单车道的隧道(相当于并发的多线程在隧道里进行了串行) 52 public void pass(){ 53 synchronized(ob){ 54 System.out.println(name + "穿越隧道"); 55 try{Thread.sleep(passTime*1000);} 56 catch(Exception e){} 57 System.out.println(name + "发了"+passTime +"秒时间穿越"); 58 } 59 } 60 }

 

 

 

转载请注明原文地址: https://www.6miu.com/read-45348.html

最新回复(0)