From eadcc6fe1c585d60f73debe69cc038948d198371 Mon Sep 17 00:00:00 2001 From: Matti Date: Fri, 31 May 2024 14:29:43 +0200 Subject: [PATCH] Parallel adding kinda works --- src/part3/aufg2/Schlenglein.java | 9 +++++++ src/part4/aufg2/Demo.java | 19 +++++++++++++++ src/part4/aufg2/Printer.java | 18 ++++++++++++++ src/part4/aufg2/User.java | 40 ++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+) create mode 100644 src/part4/aufg2/Demo.java create mode 100644 src/part4/aufg2/Printer.java create mode 100644 src/part4/aufg2/User.java diff --git a/src/part3/aufg2/Schlenglein.java b/src/part3/aufg2/Schlenglein.java index 359772a..a907813 100644 --- a/src/part3/aufg2/Schlenglein.java +++ b/src/part3/aufg2/Schlenglein.java @@ -62,4 +62,13 @@ public class Schlenglein { System.arraycopy(temp, 0, myArray, 0, maxSize / 2); } } + + public void printAll(){ + System.out.print("["); + for (int i = 0; i < this.size()-1; i++) { + System.out.print(this.myArray[i] + ", "); + } + System.out.println(this.myArray[this.size()-1] + "]"); + + } } diff --git a/src/part4/aufg2/Demo.java b/src/part4/aufg2/Demo.java new file mode 100644 index 0000000..e4d6872 --- /dev/null +++ b/src/part4/aufg2/Demo.java @@ -0,0 +1,19 @@ +package part4.aufg2; + +/* +In einem System arbeiten eine Reihe von Benutzer, die von Zeit zu Zeit +Druckaufträge eines gewissen Umfangs erzeugen. +Diese werden in einer Druckerwarteschlange verwaltet. +Zwei Drucker stehen zur Verfügung und arbeiten die Aufträge ab. + +Modellieren Sie das Problem als Erzeuger‐Verbraucher‐Problem und realisieren Sie es in Java. + */ + +public class Demo { + public static void main(String[] args) { + User u1 = new User(1); + User u2 = new User(2); + u1.start(); + u2.start(); + } +} diff --git a/src/part4/aufg2/Printer.java b/src/part4/aufg2/Printer.java new file mode 100644 index 0000000..2b23ba2 --- /dev/null +++ b/src/part4/aufg2/Printer.java @@ -0,0 +1,18 @@ +package part4.aufg2; + +import part3.aufg2.Schlenglein; + +public class Printer { + static Schlenglein q; + + public void run(){ + synchronized (getClass()){ + try { + q.wait(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + } + } +} diff --git a/src/part4/aufg2/User.java b/src/part4/aufg2/User.java new file mode 100644 index 0000000..9f31b94 --- /dev/null +++ b/src/part4/aufg2/User.java @@ -0,0 +1,40 @@ +package part4.aufg2; + +import part3.aufg2.Schlenglein; + + + +public class User extends Thread { + private int threadNumber; + static Schlenglein q = new Schlenglein(); + + public User(int threadNumber) { + this.threadNumber = threadNumber; + } + + public synchronized void makeRequest() { + synchronized (getClass()) { + int randomInt = (int) (Math.random() * ((int) (Math.random() * 1000))); + String randomIntStr = this.threadNumber + " " + randomInt; + q.add(randomIntStr); + q.printAll(); + } + } + + public void run() { + + try { + // q.notify(); + } catch (IllegalMonitorStateException e) { + throw new RuntimeException(e); + } + for (int i = 0; i<10; i++) { + makeRequest(); + try { + sleep(100); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } +} \ No newline at end of file