2013-12-20 135 views
1

我有一個併發編程的任務,我想知道如何去做某件事情。 我必須有一個電梯模擬器,在那裏人們稱電梯,電梯會收集它們並將它們帶到目的地樓層。當電梯沒有做任何事情時,它會睡覺,人會有一種喚醒電梯的方法(通過按下按鈕)。Java併發喚醒線程

最終該計劃將不得不永久運行,電梯開始時會被創建,並且隨機創建人員,並不斷地呼叫電梯。 我想知道,我該如何讓程序永遠運行,直到我停下來,電梯等待一個人喚醒它。

在我的主類我現在有這個權利:

new Thread(elevators[0]).start(); 

    panels[3].pressButton().getButtonPanel().pressButton(5); 
    panels[1].pressButton().getButtonPanel().pressButton(0); 
    panels[2].pressButton().getButtonPanel().pressButton(4); 

我也有人民的數組,但我想不斷隨機生成的是什麼。 所以在Person課程中他們會喚醒電梯,但是我怎樣才能讓電梯永遠睡在這裏呢? 感謝您的任何幫助

回答

2

要永久運行,只需將所有代碼放在while(true)循環中即可。要停止它,你可以在正確的條件下使用break。或者(並有可能更乾淨的代碼)使用while(condition)循環,您的條件通過某種方法從true變爲false。例如有這一切都在你的類:

boolean shouldBeRunning = true; 

(...) 

while(shouldBeRunning){ 
    //all the logic here 
} 

(...) 

public void stop(){ 
    this.shouldBeRunning = false; 
} 

要有elewator等待,直到有人把它,使用方法wait()。如果另一個線程在服務員監視器上呼叫notify,等待的線程可以'喚醒'。獲取有關wait()notify的更多信息,以更好地理解它。然後執行應該不成問題。

+0

感謝您的回覆。我知道我可以用等待(真)來永遠運行,主要是我不確定新人的實現。如果我在主要方法中創建線程,是否可以在Person類中喚醒電梯線程? – AndyOHart

+1

那麼,實際上你只能從擁有鎖的線程調用notify。但是如何在主類內產卵elewator線程? – 3yakuya

+0

電梯線程在主線程中啓動並運行。我從哪裏去? – AndyOHart