From b0ab2e3fe3ccdb9e6133d86f604f9cbd14be5bbd Mon Sep 17 00:00:00 2001 From: Alexander Chebotin Date: Wed, 29 Nov 2023 14:32:38 +0300 Subject: [PATCH 1/2] Create CheckSystem Chebotin Alexandr --- CheckSystem | 155 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 CheckSystem diff --git a/CheckSystem b/CheckSystem new file mode 100644 index 0000000..0fdda2a --- /dev/null +++ b/CheckSystem @@ -0,0 +1,155 @@ + +import java.util.Comparator; +import java.util.Date; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.atomic.AtomicInteger; + +public class CheckSystem { + private static final int NUMBER_OF_TEACHERS = 2; + private static final int NUMBER_OF_STUDENTS = 5; + private final PriorityBlockingQueue tasks; + private final ConcurrentMap results; + + + public CheckSystem() { + Comparator comparator = Comparator.comparing(Hometask::getDate); + tasks = new PriorityBlockingQueue<>(1, comparator); + results = new ConcurrentHashMap<>(); + } + + + public static void main(String[] args) { + CheckSystem cs = new CheckSystem(); + + Teacher[] teachers = new Teacher[NUMBER_OF_TEACHERS]; + Student[] students = new Student[NUMBER_OF_STUDENTS]; + + + for (int i = 0; i < NUMBER_OF_STUDENTS; i++) { + students[i] = new Student(i, cs); + new Thread(students[i]).start(); + } + + for (int i = 0; i < NUMBER_OF_TEACHERS; i++) { + teachers[i] = new Teacher(i, cs); + new Thread(teachers[i]).start(); + } + + } + + public PriorityBlockingQueue getTasks() { + return tasks; + } + + public ConcurrentMap getResults() { + return results; + } + + public Result getResult(Student student) { + return results.get(student); + } +} + +record Result(Hometask task, int mark) { +} + +class Student extends Thread { + private final int studentId; + private final CheckSystem cs; + + public Student(int id, CheckSystem cs) { + this.studentId = id; + this.cs = cs; + } + + @Override + public void run() { + while (true) { + try { + doHometask(); + relax(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + } + + private void doHometask() throws InterruptedException { + System.out.println("Student" + studentId + " doing hometask"); + Thread.sleep(2000); + Hometask hometask = new Hometask(new Date(), studentId); + cs.getTasks().put(hometask); + } + + private void relax() throws InterruptedException { + System.out.println("Student" + studentId + " relaxing"); + Thread.sleep(1000); + } + +} + +class Teacher extends Thread { + private final int teacherId; + private final CheckSystem cs; + + public Teacher(int id, CheckSystem cs) { + this.teacherId = id; + this.cs = cs; + } + + @Override + public void run() { + while (true) { + try { + System.out.println("Waiting for tasks to check"); + Hometask task = cs.getTasks().take(); + check(task); + + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + + } + } + + public void check(Hometask task) throws InterruptedException { + System.out.println("Teacher" + teacherId + " checking task " + "Hometask" + task.getHometaskId()); + Thread.sleep(3000); + + Random rand = new Random(); + Result result = new Result(task, rand.nextInt(100)); + cs.getResults().put(task.getStudentId(), result); + } +} + +class Hometask { + private static AtomicInteger count = new AtomicInteger(0); + private final AtomicInteger hometaskId = new AtomicInteger(count.getAndIncrement()); + + private Date date; + private final int studentId; + + public Hometask(Date date, int studentId) { + this.date = date; + this.studentId = studentId; + } + + public Date getDate() { + return date; + } + + public int getStudentId() { + return studentId; + } + + public static AtomicInteger getCount() { + return count; + } + + public AtomicInteger getHometaskId() { + return hometaskId; + } +} From b8deaffa4c2e24981cafd14830913405dac53857 Mon Sep 17 00:00:00 2001 From: Alexander Chebotin Date: Wed, 29 Nov 2023 14:34:25 +0300 Subject: [PATCH 2/2] Rename CheckSystem to CheckSystem.java --- CheckSystem => CheckSystem.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename CheckSystem => CheckSystem.java (100%) diff --git a/CheckSystem b/CheckSystem.java similarity index 100% rename from CheckSystem rename to CheckSystem.java