Java 同时暂停/挂起多个线程,然后继续
是的,这是一个作业问题 我正在为电梯模拟创建多个线程,现在线程正在运行,但现在必须中断它们。我尝试过在按下“暂停”按钮时使用访问修饰符进行更改Java 同时暂停/挂起多个线程,然后继续,java,multithreading,button,pause,Java,Multithreading,Button,Pause,是的,这是一个作业问题 我正在为电梯模拟创建多个线程,现在线程正在运行,但现在必须中断它们。我尝试过在按下“暂停”按钮时使用访问修饰符进行更改 eg: While(true){ if(!Paused){ *run code* } else { thread.sleep(10000); System.out.println("Paused"); }} 但它不起作用,我试着调用电梯并直接暂停它,但我认为我的问题是,我没
eg: While(true){
if(!Paused){
*run code*
}
else {
thread.sleep(10000);
System.out.println("Paused");
}}
但它不起作用,我试着调用电梯并直接暂停它,但我认为我的问题是,我没有访问线程,我正在访问电梯对象,而不是线程本身
eg: public void aWait() {
for (Elevator e : elevators)
{
e.pauseThread();
}}
仅针对上下文,我的runnable实现如下:
eg: public void run() {
while (true) {
while (!paused) {
moveToNextDestination();
process();
System.out.println(Building.getStatusReport());}}}
我的过程是这样的
eg: public void process() {
Person person;
for (Elevator elevator : Building.elevators) {
if (elevator.isAvailable() && (elevator.getCurrentFloor() == 0)) {
while (Building.queue.size() > 0 && elevator.hasCapacity()) {
person = Building.queue.get(0);
elevator.loadPerson(person);
Building.queue.remove(0);
}
}
}
}
我并不需要电梯本身的帮助,只需要管理线程,任何关于如何管理此问题的建议都将不胜感激。为什么不让一个类运行类似布尔值的东西呢。每个线程都可以检查运行是真是假,并执行相应的操作。您可以使用监视器锁或
重新导入锁来“暂停”线程(当设置了相应的标志时),这将允许您在将来的某个时候“唤醒”它们也许我不明白这个问题,但是您不应该使用等待
和通知
(分别是通知所有人
)吗?但是从您的示例代码中,我只能看到您正在处理的单个线程。多线程在哪里发生?或者你像MadProgrammer建议的那样使用一个信号灯。你看到了什么行为,它与你想要的行为有何不同?此外,请提供可编译和运行的代码。您可以去掉电梯的行为,但是为了理解并发性问题,您遗漏了很多我们需要看到的内容。