Java лабораторная на многопоточность

170
23 июля 2018, 20:10

Создать приложение с 2 параметрами. 1 параметр задает количество cтудентов, 2-ой параметр задает количество преподавателей. каждый преподаватель строго по очереди приглашает любого студента. Как только студент получает приглашение , то поток студент заканчивается. Преподаватель становится после этого последним в очереди преподавателей на вызов студента . Потоки - преподаватели должны работать строго по очереди. Работа продолжается пока есть хоть один студент и если число преподавателей больше нуля. Использовать ограничения из задания 3. Выводить на дисплей имя преподавателя вместе с именем студента. Выглядеть это будет примерно так: преподаватель1- студент3 преподаватель2- студент1 преподаватель1- студент4 преподаватель2- студент2

Я сижу уже три вечера над этой задачей. Мб кто знает, что взять за разделённую переменную и как организовать классы, чтобы это работало, как просят?

Я думаю, что нужно создать класс Журнал, разделить его объект между потоками студент и преподаватель и записывать в privat string Журнала. Но как организовать параллельную очередь?

UPD:

Я реализовал просто очередь. Она работает не параллельно. Нужно чтобы они выводились не по порядку. А рандомно (из-за работы планировщика)

Class Audience:

public class Audience {
    private int amountOfLecturers;
    private int amountOfStudents;
    Queue<Lecturer> lecturers;
    Queue<Student> students;
    public Audience() {
        this.lecturers = new LinkedList<Lecturer>();
        this.students = new LinkedList<Student>();
    }
    public Audience(int amountOfLecturers, int amountOfStudents) {
        this.amountOfLecturers = amountOfLecturers;
        this.amountOfStudents = amountOfStudents;
        this.lecturers = new LinkedList<Lecturer>();
        this.students = new LinkedList<Student>();
        //Assigned name to lecturer
        for (int i = 0; i < amountOfLecturers; i++) {
            Lecturer lect = new Lecturer("Lecturer " + (i + 1));
            lecturers.add(lect);
        }
        //Assigned name to student
        for (int i = 0; i < amountOfStudents; i++) {
            Student stud = new Student("Student " + (i + 1));
            students.add(stud);
        }
    }
    public String queue() {
        String queueStatus = new String();
        Iterator<Student> iter = students.iterator();
        while (iter.hasNext()) {
            lecturers.add(lecturers.element());
            queueStatus =
                    queueStatus +
                    "\n" +
                    lecturers.poll().inviteStudent(students.poll())
            ;
        }
        return queueStatus;
    }
}

Class Lecturer:

public class Lecturer implements Runnable {
    String name;
    public Lecturer() {
    }
    public Lecturer(String name) {
        this.name = name;
    }
    public void setName(String nameFromOut) {
        this.name = nameFromOut;
    }
    public String getName() {
        return this.name;
    }
    public String inviteStudent(Student student) {
        String pair;
        pair = this.name + ": " + student.getName();
        return pair;
    }
    public void run() {
    }
}

Class Student:

public class Student {
    String name;
    public Student() {
    }
    public Student(String nameFromOut) {
        this.name = nameFromOut;
    }
    public void setName(String nameFromOut) {
        this.name = nameFromOut;
    }
    public String getName() {
        return this.name;
    }
}
READ ALSO
Как убрать заливку у элементов?

Как убрать заливку у элементов?

Как убрать данную заливку на телефонах, outline не помогает

148
Как сделать выпадающее меню?

Как сделать выпадающее меню?

Есть такой html документ

186
Как сделать проверку блока?

Как сделать проверку блока?

я наконец разобрался, с блоками, теперь вопрос в другом, как сделать проверку блока, жму на кнопку, появляется правильный блок, жму на кнопу...

151