Java Concurrency唤醒线程

时间:2013-12-20 12:23:34

标签: java multithreading concurrency sleep

我在并发编程中有一个任务,我想知道我怎么能做些什么。 我必须有一个电梯模拟器,人们打电话给电梯,电梯将收集它们并将它们带到目的地楼层。当电梯没有做任何事情时,它会睡觉,而人员将有一种方法来唤醒电梯(按下按钮)。

最终程序必须永远运行,电梯在其开始时创建,人们随机创建,不断呼叫电梯。 我想知道,我怎么能让程序永远运行,直到我停下来,电梯等待一个人叫醒它。

在我的主要班级,我现在有这个:

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

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

我也有一系列人物,但我希望这是一个不断随机生成的东西。 所以在Person课程中他们会唤醒电梯,但是如何让电梯永远在这里睡觉呢? 谢谢你的帮助

1 个答案:

答案 0 :(得分: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的更多信息,以便更好地了解它。之后实施应该不是问题。