在Java中使用ArrayDeque和Threads坚持做作业?

时间:2014-04-19 14:26:44

标签: java multithreading arraydeque

这是我的问题

一家医疗中心聘请了两名医生,每天检查和治疗最多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部分。

1 个答案:

答案 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);

    }
}