我正在用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
}
此外,当空间已满时,汽车需要排队等候空间,最好将其表示为我认为的整数。您可以假设汽车不能同时进入和离开(即系统将阻止这种情况因锁定而发生)
最终我需要把它变成一个客户端 - 服务器系统。
任何建议都非常感谢!
我的观点是每个线程应该代表一辆汽车。所以我会让主线程进入一个循环:
for (;;) {
Thread.sleep(randomAmountOfTime);
// a new car has shown up
spawn a new carThread
}
每个汽车线程都是这样的:
System.out.println("Car " + carId + " has arrived");
parkingGarage.entrance();
System.out.println("Car " + carId + " has parked");
Thread.sleep(randomAmountOfTime);
parkingGarage.exit();
System.out.println("Car " + carId + " has left");
你到目前为止所做的一切对我来说都没问题。您需要做的就是使用您的CarPark对象'parkingGarage'来模拟进入或离开的汽车。
例如:
parkingGarage.entrance();
这将模拟进入车库的汽车,因此空间会减少。
类似地,.exit()会做同样的事情,但增加空格的数量。虽然您需要添加检查以确保只有在进入时才会出现退出。例如,您不能有10个入口和20个出口,并且空格的数量将变为负数。
此外,你可以实现某种“队列”,这样当没有空格时,等待时间最长的汽车将首先得到一个空间。
线程允许你“同时”运行一些代码,请你进一步解释你想要/正在尝试做什么。
编辑:
在阅读Akshay的评论之后,它为我清理了一切。就像他们说的那样,你可以创建两个线程,一个用于处理入口,另一个用于处理出口,并且每个线程在下一辆车进入或退出之前产生随机的时间量。你会这样做:
Thread.sleep(randomAmountOfTime)
注意:此参数的处理以毫秒为单位。再次,请注意我之前的论点,即没有比入口更多的出口。
在此之后你可以打印出某种日志,当汽车退出或进入时输出一条消息,或者甚至有一个动态“标志”,显示汽车进入或退出时会改变的空闲空间数量。
希望这可以帮助。
我认为你的代码和逻辑很好..我有一些建议,