java多线程练习1

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 }

 

 


 

posted @ 2017-07-24 21:08  Aiface  阅读(154)  评论(0)    收藏  举报