Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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中使用ArrayQue和线程完成作业?_Java_Multithreading_Arraydeque - Fatal编程技术网

在Java中使用ArrayQue和线程完成作业?

在Java中使用ArrayQue和线程完成作业?,java,multithreading,arraydeque,Java,Multithreading,Arraydeque,这是我的问题 一家健康中心雇佣了两名医生,每天最多检查和治疗25名患者。 病人由两位医生中的任何一位进行检查和治疗。每个病人都必须登记自己的姓名,以便医生能够按照先到先得的原则对病人进行检查和治疗 练习2 a部分:针对上述场景2,开发一个程序,创建患者和医生都是线程的程序。患者排队登记,医生按照先到先得的原则从同一队列中挑选患者,并对其进行检查和治疗。使用非线程安全的队列,例如ArrayQue。确保您的程序没有同步问题 第二部分:使用线程安全的队列,例如ArrayBlockedQueue,并检查

这是我的问题

一家健康中心雇佣了两名医生,每天最多检查和治疗25名患者。 病人由两位医生中的任何一位进行检查和治疗。每个病人都必须登记自己的姓名,以便医生能够按照先到先得的原则对病人进行检查和治疗

练习2 a部分:针对上述场景2,开发一个程序,创建患者和医生都是线程的程序。患者排队登记,医生按照先到先得的原则从同一队列中挑选患者,并对其进行检查和治疗。使用非线程安全的队列,例如ArrayQue。确保您的程序没有同步问题

第二部分:使用线程安全的队列,例如ArrayBlockedQueue,并检查您的解决方案是否存在同步问题。确保您的解决方案不提供同步方法或同步块

这是我的密码

}

}

这是我运行它时遇到的错误

线程主java.util.NoSuchElementException中出现异常 在java.util.ArrayDeque.removeFirstArrayDeque.java:278 在lab8.lab8.mainlab.java:50 Java结果:1


我现在只是在试A部分

在主函数中,Patients ArrayDeque对象没有Patient对象。相反,它是空的,因此没有要从队列中删除的内容。您需要先添加一些患者

ArrayDeque<Patient> Patients = new ArrayDeque(25);
for(int i = 0;i<25;i++){
    (new Thread (Patients.removeFirst())).start();
}
所以你有这样的东西

public static void main(String[] args) {
    ArrayDeque<Patient> Patients = new ArrayDeque(25);
    for(int i = 0;i<25;i++){
        Patient p = new Patient("Patient No " + i);
        (new Thread (p)).start();
        Patients.add(p);

    }
}

很酷的问题。在Doctor运行中实现上述功能,然后在主线程中创建Doctor线程之后,我的输出将打印两次。你能告诉我这是为什么吗?我如何再次向你展示我的代码。这有点让人困惑:我想这是因为你给病人注册了两次。一旦进入主功能,另一次进入Patient.run。将患者添加到ArrayQue后。启动Doctor线程,在Doctor.run方法中,首先调用ArrayDeque.remove。让我知道这是否有意义。我希望我能向你展示我的代码,但我是新来的,仍然在学习如何发布,我无法理解。无论如何,非常感谢你在这个问题上花费的时间和精力。多亏了你,至少我能够输出一些东西:+1WOOOH它工作了!!!非常感谢:一旦我达到15+代表,我肯定会投你一票。你是最棒的:
ArrayDeque<Patient> Patients = new ArrayDeque(25);
for(int i = 0;i<25;i++){
    (new Thread (Patients.removeFirst())).start();
}
Patients.add(new Patient("Patient No " + i));
public static void main(String[] args) {
    ArrayDeque<Patient> Patients = new ArrayDeque(25);
    for(int i = 0;i<25;i++){
        Patient p = new Patient("Patient No " + i);
        (new Thread (p)).start();
        Patients.add(p);

    }
}