From c08f4d3196ccf72a0f669ee0c9882ad3fb8ef5d2 Mon Sep 17 00:00:00 2001 From: Sebastian Brosch Date: Thu, 30 May 2024 11:27:24 +0200 Subject: [PATCH] Vorlesung 14 / Aufgabe 2 --- VL14/Aufgabe02/Aufgabe02.java | 27 +++++++++++++++++++++++++++ VL14/Aufgabe02/Printer.java | 23 +++++++++++++++++++++++ VL14/Aufgabe02/PrinterQueue.java | 12 ++++++++++++ VL14/Aufgabe02/User.java | 23 +++++++++++++++++++++++ 4 files changed, 85 insertions(+) create mode 100644 VL14/Aufgabe02/Aufgabe02.java create mode 100644 VL14/Aufgabe02/Printer.java create mode 100644 VL14/Aufgabe02/PrinterQueue.java create mode 100644 VL14/Aufgabe02/User.java diff --git a/VL14/Aufgabe02/Aufgabe02.java b/VL14/Aufgabe02/Aufgabe02.java new file mode 100644 index 0000000..ce2ee14 --- /dev/null +++ b/VL14/Aufgabe02/Aufgabe02.java @@ -0,0 +1,27 @@ +package VL14.Aufgabe02; + +/** + * Vorlesung 14 / Aufgabe 2 + * + * @author Sebastian Brosch + */ +public class Aufgabe02 { + public static void main(String[] args) { + final int NUMBER_OF_USERS = 5; + final int NUMBER_OF_PRINTERS = 2; + + // create some users. + for (int u = 0; u < NUMBER_OF_USERS; u++) { + User user = new User(); + Thread threadUser = new Thread(user); + threadUser.start(); + } + + // create some printers. + for (int p = 0; p < NUMBER_OF_PRINTERS; p++) { + Printer printer = new Printer(); + Thread threadPrinter = new Thread(printer); + threadPrinter.start(); + } + } +} diff --git a/VL14/Aufgabe02/Printer.java b/VL14/Aufgabe02/Printer.java new file mode 100644 index 0000000..f2ac402 --- /dev/null +++ b/VL14/Aufgabe02/Printer.java @@ -0,0 +1,23 @@ +package VL14.Aufgabe02; + +/** + * Class which represents a printer. + * + * @author Sebastian Brosch + */ +public class Printer implements Runnable { + public void run() { + while (true) { + synchronized (PrinterQueue.queue) { + if (PrinterQueue.queue.size() > 0) { + System.out.println(PrinterQueue.queue.poll()); + } + } + + try { + Thread.sleep(500); + } catch (InterruptedException e) { + } + } + } +} diff --git a/VL14/Aufgabe02/PrinterQueue.java b/VL14/Aufgabe02/PrinterQueue.java new file mode 100644 index 0000000..e3e78ee --- /dev/null +++ b/VL14/Aufgabe02/PrinterQueue.java @@ -0,0 +1,12 @@ +package VL14.Aufgabe02; + +import java.util.LinkedList; + +/** + * Class which represents a printer queue. + * + * @author Sebastian Brosch + */ +public class PrinterQueue { + static LinkedList queue = new LinkedList(); +} diff --git a/VL14/Aufgabe02/User.java b/VL14/Aufgabe02/User.java new file mode 100644 index 0000000..361eb7d --- /dev/null +++ b/VL14/Aufgabe02/User.java @@ -0,0 +1,23 @@ +package VL14.Aufgabe02; + +/** + * Class which represents a user. + * + * @author Sebastian Brosch + */ +public class User implements Runnable { + private int number = 0; + + public void run() { + while (true) { + synchronized (PrinterQueue.queue) { + PrinterQueue.queue.add(Thread.currentThread().getName() + ": " + this.number++); + } + + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + } + } +}