Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java并发唤醒线程_Java_Multithreading_Concurrency_Sleep - Fatal编程技术网

Java并发唤醒线程

Java并发唤醒线程,java,multithreading,concurrency,sleep,Java,Multithreading,Concurrency,Sleep,我有一个并发编程的任务,我想知道我该怎么做。 我必须有一个电梯模拟器,在那里人们呼叫电梯,电梯将收集它们并将它们带到目的地楼层。当电梯什么也不做时,它会睡觉,人会有办法叫醒电梯(通过按下按钮) 最终,这个程序将永远运行下去,电梯在一开始就被创建,人们在随机的时间被创建,不断地呼叫电梯。 我在想,我怎样才能使程序永远运行下去,直到我停止它,电梯在那里等待一个人叫醒它 在我的主要课程中,我现在有: new Thread(elevators[0]).start(); panels[3

我有一个并发编程的任务,我想知道我该怎么做。 我必须有一个电梯模拟器,在那里人们呼叫电梯,电梯将收集它们并将它们带到目的地楼层。当电梯什么也不做时,它会睡觉,人会有办法叫醒电梯(通过按下按钮)

最终,这个程序将永远运行下去,电梯在一开始就被创建,人们在随机的时间被创建,不断地呼叫电梯。 我在想,我怎样才能使程序永远运行下去,直到我停止它,电梯在那里等待一个人叫醒它

在我的主要课程中,我现在有:

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

    panels[3].pressButton().getButtonPanel().pressButton(5);
    panels[1].pressButton().getButtonPanel().pressButton(0);
    panels[2].pressButton().getButtonPanel().pressButton(4);
我也有很多人,但我希望这些人是不断随机产生的。 所以在个人课上,他们会叫醒电梯,但我怎么能让电梯永远睡在这里呢?
感谢所有帮助

永远运行,只需将所有代码放入
while(true)
循环中即可。要停止它,您可以在正确的条件下使用break。或者(为了得到一个可能更干净的代码)使用
while(condition)
循环,通过您可以调用的某种方法将您的条件从true更改为false。例如,在您的课堂上学习所有这些内容:

boolean shouldBeRunning = true;

(...)

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

(...)

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

要让elewator一直等到有人调用它,请使用方法
wait()
。如果另一个线程调用waiters监视器上的
notify
,则等待的线程可以被“唤醒”。获取有关
wait()
notify
的更多信息,以便更好地了解它。之后的实施应该不会有问题。

谢谢您的回复。我知道我可以用wait(true)永远运行,这主要是实现不断地产生新的人,我不是很确定。如果我在main方法中创建线程,我可以唤醒Person类中的电梯线程吗?实际上,您只能从拥有锁的线程调用notify。但是在主类中生成elewator线程怎么样?电梯线程在主线程中启动并运行。我该怎么办?这里有一个关于严格等待通知用法的问题:让我们