Java停车场,减少空间

时间:2016-01-06 16:08:04

标签: java multithreading networking locking

我正在用Java创建一个停车场,我有一个入口和一个出口。停车场有20个停车位,我想我已经正确编码了入口/出口,我被要求使用穿线。

import java.io.*;

public class CarPark {
    private int spaces;

    public CarPark(int spaces)
    {
        if (spaces < 0) {
            spaces = 0;
        }

        this.spaces = spaces;
    }

    public synchronized void entrance() //enter car park
    {
        while (spaces == 0) { 
            try {
                wait();
            } catch (InterruptedException e)
            {

            }
        }
        spaces --;
    }

    public synchronized void exit() // exit car park
    {
        spaces++;
        notify();
    }
}   

我只是有点坚持如何代表实际的停车库本身并创建可以随着汽车接近或离开而递减或递增的空间。到目前为止,我已经为主要方法编写了以下代码:

public static void main(String[] args){     
    CarPark parkingGarage = new CarPark(20); //20 spaces    
}

此外,当空间已满时,汽车需要排队等候空间,我认为最好将其表示为整数。 你可能会认为汽车不能同时进出(即系统会因锁定而无法防止这种情况发生)

最终我需要将其变成客户端 - 服务器系统。

非常感谢任何建议!

3 个答案:

答案 0 :(得分:1)

到目前为止,您所做的一切对我来说都没问题。您所需要做的就是使用您的CarPark对象&#39; parkingGarage&#39;模拟进入或离开的汽车。

例如:

parkingGarage.entrance();

这将模拟进入车库的汽车,因此空间会减少。

类似地,.exit()会做同样的事情,但增加空格的数量。虽然您需要添加检查以确保只有在进入时才会出现退出。例如,您不能有10个入口和20个出口,空格数将变为负数。

另外,你可以实现某种排队&#39;因此,当没有空间时,等待时间最长的车将首先获得空间。

线程允许您同时运行一些代码&#39;您能否进一步解释您想要/正在尝试做什么。

修改

在阅读Akshay的评论后,它为我解决了问题。就像他们说的那样,你可以创建两个线程,一个用于处理入口,另一个用于处理出口,并且每个线程在下一辆车进入或退出之前产生随机的时间量。你可以这样做:

Thread.sleep(randomAmountOfTime)

注意:此参数以毫秒为单位处理。再次,请注意我之前的论点,即没有比入口更多的出口。

在此之后,你可以打印出某种日志,当汽车退出或进入或甚至有一个动态的标志时,它会输出一条消息。它显示了汽车进出时会发生变化的自由空间数量。

希望这有帮助。

答案 1 :(得分:1)

我的观点是每个线程都应代表一辆车。所以我会让主线程进入循环:

.activeBackground{
    background-color: green;
}
.activeBackground .arrow-div{
    border-left-color: green;
}

每个汽车线程都是这样的:

for (;;) {
    Thread.sleep(randomAmountOfTime);
    // a new car has shown up
    spawn a new carThread
}

答案 2 :(得分:0)

我认为你的代码和逻辑很好.. 我有一些建议,

  1. 为汽车使用多个进出门,以便您的系统成为先进的
  2. 使用arraylist的概念,以便您可以动态地增加您的汽车数量的限制。 我这个特殊的代码你只使用了20辆汽车。