我在Java創建停車場,我有一個入口和一個出口。停車場有20個車位,而且我認爲我已經正確編碼了入口/出口,我被要求使用線程。Java中的停車場,遞減空間
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
}
而且當位已滿,汽車需要排隊的空間,這將是最好的表示這是一個整數,我認爲。 你可能會認爲汽車不能同時進入和離開(即系統會因鎖定而發生這種情況)
最終我需要將它變成客戶機 - 服務器系統。
任何意見,非常感謝!
你所做的一切似乎罰款。嘗試創建兩個線程 - 一個定期重複調用入口方法的線程,另一個定期重複調用exit方法。在出口和入口方法中打印CarPark的內容並運行你的代碼,看看它是如何工作的。 –
雖然你可能無法使用它(因爲你必須編寫較低級別的線程代碼),但Semaphore旨在幫助你在這種情況下(許可證的概念,獲取,發佈) –
@AndyTurner我看到了死鎖,然而我正在努力的規範將鎖定作爲一項要求。 – collision934