Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions src/Checker.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import java.util.concurrent.Semaphore;

public class Checker extends Thread {
private final Homework homework;
private final Semaphore semaphore;

public Checker(Homework homework, Semaphore semaphore) {
this.homework = homework;
this.semaphore = semaphore;
}

@Override
public void run() {
try {
semaphore.acquire();
System.out.println("Checking homework '" + homework.getName() + "' from ID: " + homework.getId());

long currentTime = System.currentTimeMillis();
if (currentTime > homework.getDeadline()) {
System.out.println("Homework '" + homework.getName() + "' ID " + homework.getId() + " not completed by deadline. Grade: 2");
} else {
Thread.sleep(1000);

int grade = (int) (Math.random() * 4 + 2);
System.out.println("Homework grade '" + homework.getName() + "' to ID " + homework.getId() + ": " + grade);
}

semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
28 changes: 28 additions & 0 deletions src/Homework.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
public class Homework implements Comparable<Homework> {
private final int id;
private final String name;
private final long deadline;

public Homework(int id, String name, long deadline) {
this.id = id;
this.name = name;
this.deadline = deadline;
}

public int getId() {
return id;
}

public String getName() {
return name;
}

public long getDeadline() {
return deadline;
}

@Override
public int compareTo(Homework other) {
return Long.compare(this.deadline, other.deadline);
}
}
28 changes: 28 additions & 0 deletions src/HomeworkCheckingSystem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.Semaphore;

public class HomeworkCheckingSystem {
private final Semaphore semaphore;
private final PriorityBlockingQueue<Homework> homeworkQueue = new PriorityBlockingQueue<>();

public HomeworkCheckingSystem(int permits) {
this.semaphore = new Semaphore(permits);
}

public void receiveHomework(Homework homework) {
homeworkQueue.add(homework);
processHomework();
}

private void processHomework() {
while (!homeworkQueue.isEmpty()) {
try {
Homework homework = homeworkQueue.take();
Checker checker = new Checker(homework, semaphore);
checker.start();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
23 changes: 23 additions & 0 deletions src/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
public class Main {
public static void main(String[] args) {
HomeworkCheckingSystem system = new HomeworkCheckingSystem(3);

String[] homeworkNames = {"Математика", "Физика", "Литература", "История", "Биология"};

while (true) {
int studentId = (int) (Math.random() * 100);
int homeworkId = (int) (Math.random() * 100);
String homeworkName = homeworkNames[(int) (Math.random() * homeworkNames.length)];
long deadline = System.currentTimeMillis() + (long) (Math.random() * 10);

Student student = new Student(studentId);
student.submitHomework(system, new Homework(homeworkId, homeworkName, deadline));

try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
11 changes: 11 additions & 0 deletions src/Student.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
public class Student {
private final int id;

public Student(int id) {
this.id = id;
}

public void submitHomework(HomeworkCheckingSystem system, Homework homework) {
system.receiveHomework(homework);
}
}