java多线程练习1

时间:2023-02-13 22:03:20

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 }