这是我的问题
一家医疗中心聘请了两名医生,每天检查和治疗最多25名患者。 患者由两位医生中的任何一位检查和治疗。每位患者都必须注册他的名字,以便医生可以先到先得的方式检查和治疗患者。
练习2 第一部分:对于上面提到的方案2,开发一个创建患者和医生的程序(两者都是线程)。患者在队列中登记,医生在先到先得的基地从同一队列中挑选患者并检查和治疗他们。使用非线程安全的队列(例如ArrayDeque)。确保您的程序没有同步问题。
b部分:使用线程安全的队列(例如,ArrayBlockedQueue)并检查您的解决方案是否存在同步问题。 (确保您的解决方案不提供同步方法或同步块)
这是我的代码
package lab8;
import java.util.ArrayDeque;
public class LAB8 {
class Doctor implements Runnable {
private String name;
private Patient patient;
Doctor (String n){
name = n;
}
public void examine (){
System.out.println("Doctor is now examining the patient");
}
public void treat(){
System.out.println("Doctor is now treating the patient");
}
@Override
public void run (){
}
}
static class Patient implements Runnable {
private String name;
Patient (String n){
name = n;
}
public void register(String name){
System.out.println(name + " is registering in Queue");
}
@Override
public void run(){
ArrayDeque<Patient> Patients = new ArrayDeque(25);
for(int i = 0;i<25;i++){
Patients.add(new Patient("Patient No " + i));
Patients.removeFirst().register("Patient No " + i);
}
}
}
public static void main(String[] args) {
ArrayDeque<Patient> Patients = new ArrayDeque(25);
for(int i = 0;i<25;i++){
(new Thread (Patients.removeFirst())).start();
}
}
}
这是我运行时遇到的错误。
线程中的异常&#34; main&#34; java.util.NoSuchElementException at java.util.ArrayDeque.removeFirst(ArrayDeque.java:278) 在lab8.LAB8.main(LAB8.java:50) Java结果:1
我现在只尝试A部分。
答案 0 :(得分:0)
在main函数中,Patients
ArrayDeque对象没有Patient对象。相反它是空的,所以没有什么可以从队列中删除。您需要先添加一些患者。
ArrayDeque<Patient> Patients = new ArrayDeque(25);
for(int i = 0;i<25;i++){
(new Thread (Patients.removeFirst())).start();
}
您需要首先将新患者添加到Patients
ArrayDeque,就像您在这里一样。
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);
}
}