Java--多线程处理--模拟车辆进入入收费

Posted Catherine_zhilin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java--多线程处理--模拟车辆进入入收费相关的知识,希望对你有一定的参考价值。

 1 package simulation;
 2 
 3 import java.util.Random;
 4 
 5 class Vehicle implements Runnable{
 6     private int id;
 7     private static TollBooth toll =new TollBooth();
 8     public Vehicle(int id ) {
 9         this.id=id;
10     }
11     public void run () {
12         //1开始旅程
13         System.out.println("Vericle "+(id+1)+"starts journey");
14         Random RandGen =new Random();
15         int Rnd =RandGen .nextInt(100);
16         //2到达收费站
17         travel(Rnd);
18         System.out.println("Vericle"+(id+1)+"arrives at the toll");
19         //3通过收费站useToll方法要么是同步方法,要么是方法中有同步语句块
20         toll.useToll(this);
21         //4离开收费站
22         travel(Rnd);
23         //通过桥梁
24         
25         System.out.println("Vericle"+(id+1)+"has cross the bridge");
26     }
27     public int getVericleId() {
28         return this.id;
29         
30     }
31     public void travel (int time) {
32         int limit =500000;
33         for(int j=0;j<time;j++) {
34             for(int k=0;k<limit;k++) {    
35             }
36         }
37     }
38 }
39 //收费站
40 class TollBooth {
41     boolean inUse;
42     public TollBooth() {
43         inUse =false;
44     }
45     public void useToll(Vehicle vehicle) {
46         while(true) {
47             if(inUse==false) {
48                 synchronized (this) {
49                     inUse=true;
50                     System.out.println("Vericle"+(vehicle.getVericleId()+1)+"enters toolboth ");
51                     vehicle.travel(50);
52                     System.out.println("Vehicle"+(vehicle.getVericleId()+1)+"exits toolbooth");
53                     inUse =false;
54                     break;
55                 }
56             }
57         }
58     }
59 }
60 public class Simulate {
61     private static int noOfVehicles=5;
62     private static Vehicle[] vehicles;
63     public static void main(String args[]) {
64         try {
65             Simulate sm=new Simulate();
66             vehicles=new Vehicle[5];
67             for(int i=0;i<noOfVehicles;i++) {
68                 vehicles[i]=new Vehicle(i);
69                 Thread t=new Thread(vehicles[i]);
70                 t.start();
71                 Thread.sleep(10);
72             }
73         }
74         catch(Exception ex) {
75             System.out.println(ex);
76         }
77     }
78 
79 }
View Code

测试结果:

 

以上是关于Java--多线程处理--模拟车辆进入入收费的主要内容,如果未能解决你的问题,请参考以下文章

Java 多线程总结

多线程程序,当一条原子指令刚执行一半的时候,CPU时间片耗尽,此时是立刻切换线程吗?

Java并发多线程编程——Semaphore

JAVA进程与线程

Java并发前期知识点

Java多线程——常用的方法